工廠模式抽象了建立具體物件的過程,能夠快速建立大量具有相似屬性及方法的物件。
function createperson(name, age, job) ;
obj.name = name;
obj.age = age;
obj.job = job;
obj.sayname = function() ;
return obj;
}var person1 = createperson('*****_crane', 22, 'student');
var person2 = createperson('crane', 22, 'software engineer');
person1.sayname();
person2.sayname();
工廠模式雖然解決了建立多個相似物件的問題,但卻沒有解決物件識別的問題,即建立出來的物件都是無型別的,無法使用instanceof操作符區別。
建構函式名稱以大寫字母開頭(建議但不強制),使用new操作符來呼叫建構函式。
function person(name, age, job) ;
}var person = new person('*****_crane', 22, 'student');
person.sayname(); // *****_crane
上述的過程經歷的四個步驟:
1.建立乙個新的物件;
2.將建構函式的作用域賦給新物件(因此this物件指向了這個新的物件);
3.執行建構函式中的**(為這個新物件新增屬性);
4.返回新物件。
這種方式建立物件能夠通過instanceof操作符檢測例項是那個建構函式的物件,但是,這種方式的乙個缺點就是每個方法都會在每個例項上重新建立一遍,當例項過多的時候,實際上會消耗較多的記憶體。
我們建立的每個函式都有乙個prototype屬性,這個屬性就是乙個指標,指向乙個物件;而這個物件的用途是包含可以由特定型別的所有例項共享的屬性和方法。使用原型物件的好處是可以讓所有物件例項共享它所包含的屬性和方法。
function person() {}
person.prototype.name = '*****_crane';
person.prototype.age = 22;
person.prototype.job = 'student';
person.prototype.sayname = function() ;
var person1 = new person();
var person2 = new person();
person1.sayname(); // *****_crane
person2.sayname(); // *****_crane
alert(person1.sayname === person2.sayname); // true
原型模式的缺點是:省略了為建構函式傳遞初始化引數這一環節,所有的屬性和方法都共享,無法區分差別。
這是建立物件的最常見模式,能有效解決上述方式的缺點。
function person(name, age, job)
person.prototype =
}var person1 = new person('*****_crane', 22, 'student');
var person2 = new person('crane', 22, 'software engineer');
person1.colors.push('black');
alert(person1.colors); // red,blue,black
alert(person2.colors); // red,blue
alert(person1.colors === person2.colors); // false
alert(person1.sayname === person2.sayname); // true
此方式可以在建立例項的時候傳入引數,同時共享方法。
JavaScript建立物件
一 建立單個物件 方式一 object建構函式 var o new object o.key value 方式二 物件字面量 方式一和二缺點 使用相同的介面建立很多物件會產生大量重複 使用方式三解決 方式三 工廠模式 使用函式封裝以特定介面建立物件的細節 function createobject ...
JavaScript 建立物件
function person var person new person 複製 使用關鍵字new建立新例項物件經過了以下幾步 1 建立乙個新物件,如 var person 2 新物件的 proto 屬性指向建構函式的原型物件。3 將建構函式的作用域賦值給新物件。也所以this物件指向新物件 4 執...
javascript物件建立
1 var person new object 2 person.name lea 3 person.age 26 4alert person.name 5 alert person name 1 var person 5 alert person my age 一般來說物件訪問屬性時使用點表示法,...