單例模式 ??(基於對象,不能批量生產)
var person = {
name: "ywb",
sayHi: function () {
alert();
} ,
0:'0',
1 :'1'
}
person.sayHi();
for (var k in person) {
//k是屬性名
//獲得屬性值 person[k]
alert(k);
alert(person[k]);
}
特色
1,咱們定義的這些屬性和值都是對咱們當前這個對象的描述
定義屬性名的時候能夠用數字,把能夠用數字這種形式成爲類數組
2 , 對象的屬性之間有可能也是有關聯的
3,經過for in遍歷對象的時候,若是有數字的屬性名,就先遍歷數字
for in循環中獲取對象的屬性值,只能用obj[屬性名]的方式。
--------------------------------------------------------------------
工廠模式
定義一個方法,方法內部建立一個Object數據類型,而後返回這個對象。
function factory(name, age) {
var obj = new Object();
obj.name = name;
obj.age = age;
obj.sayHi = function () {
alert("hello," + name);
}
return obj;
}
var ywb = factory("ywb", 18);
ywb.sayHi();
工廠模式全部的對象類型都是一個object
構造函數模式
我的理解:更像class同樣,建立對象去new一個class
經過new這種方式,出來的結果是一個實例。
function person(name, age) {
this.name = name;
this.age = age;
this.sayHi = function () {
alert("hello," + name);
}
}
var ywb = new person("ywb", 18);
ywb.sayHi();
alert(ywb instanceof Person ); //能夠肯定ywb是Person的實例
這時候,這個實例(對象)是誰,this就指向誰。this就是這個實例的上下文in
由於每一次實例化一個function,都會在內存中存這個function的字符串
原型模式
建立一個對象,咱們不只在內存中開闢了空間,將本身私有的鍵值對存進來,還有個系統自帶的屬性_proto_。
在聲明function時,它也有一個本身的屬性,就是prototype。
prototype也有_proto_屬性
function factory(age) {
this.name = "hart";
this.age = age;
}
factory.prototype.sayHi = function () {
alert("hello," + name);
}
factory.prototype.name = "ywb";
var p1 = new factory(11);
p1.__proto__ = null;
alert(p1.name);
若是咱們的某個實例想獲取類中的prototype上定義的方法和屬性,咱們的原理是實例中默認的_proto_屬性去獲取。
調用一個方法或屬性,首先去其私有屬性上找,沒有找到纔去原型鏈上找。
Object是全部實例的基類。
p1.__proto__.name 就是去原型上找而不去屬性上找
若是你以爲個人文章對您有幫助,給點鼓勵,謝謝數組
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)