js細節

什麼是鴨子類型javascript

javascript的面向對象java

封裝編程

繼承設計模式

多態閉包

原型app

this指向函數

callthis

applyprototype

band設計

js中的閉包

什麼是高階函數

在寫面向對象編程思想-設計模式中的js部分的時候發現不少基礎知識不瞭解的話,是很難真正理解和讀懂js面向對象的代碼。爲此,在這裏先快速補上。而後繼續咱們的面向對象編程思想-設計模式。

什麼是鴨子類型

 

javascript是一門典型的動態類型語言,也就弱類型語言。

那什麼是鴨子類型:【若是它走起路來像鴨子,叫起來也是鴨子,那麼它就是鴨子】

var 鴨子 = {

    走路: function () { },

    咕咕咕: function () { }

}

 

var 鸚鵡 = {

    走路: function () { },

    咕咕咕: function () { }

}

這隻鸚鵡一樣有「走路」和「咕咕咕」的方法,那在js的世界裏就能夠把它當成鴨子。

能夠這樣調用:

var 鴨子們 = [];

鴨子們.push(鴨子);

鴨子們.push(鸚鵡);

 

for (var i = 0; i < 鴨子們.length; i++) {

    鴨子們[i].走路();

}

因此js的世界沒有抽象和接口,但能夠約定「咱們都是鴨子」。

javascript的面向對象

 

javascript不只是直譯式腳本語言、動態類型、弱類型語言、函數爲一等公民的語言,它仍是基於原型的面嚮對象語言。面向對象三大特性:封裝、繼承、多態,下面咱們用js分別實現。

封裝

var Person = (function () { 

    var sex = "純爺們";

    return {

        name: "農碼一輩子",

        getInfo: function () {

            console.log("name:" + this.name + ",sex:" + sex);

        }

    };

})();

 

雖然老的js語法沒有提供private等關鍵字,可是咱們能夠利用閉包來實現私有字段,達到封裝的目的。

繼承

字面量表示:

var Person = {

name: "農碼一輩子",

getName: function () {

    console.log(this.name);

}

};

var obj = Person;

obj.getName();

 

函數構造器:

var Person = function () {

    this.name = "農碼一輩子";    

}

Person.prototype.getName = function () {

    console.log(this.name);

}

 

var obj = function () { };

obj.prototype = new Person();//obj繼承於Person

 

var o = new obj();

o.getName();//直接調用原型中的getName(相似於C#中的調用父類方法)

 

多態

對於多態,其實上面的鴨子類型已經表現的很清楚了。

var 鴨子們 = [];

鴨子們.push(鴨子);

鴨子們.push(鸚鵡);

 

for (var i = 0; i < 鴨子們.length; i++) {

    鴨子們[i].走路();//對於鸚鵡來講,它多是跳着走。對於鴨子來講,它可能左右搖擺着走。這就是多態的表現。

}

對於鸚鵡來講,它多是跳着走。對於鴨子來講,它可能左右搖擺着走。這就是多態的表現。

相關文章
相關標籤/搜索