//動態(tài)原形模式
function?Person(name,?age,?job){
//屬性
this.name?=?name;
this.age?=?age;
this.job?=?job;
//方法
if?(typeof?this.sayName?!=?"function"){
Person.prototype.sayName?=?function(){
alert(this.name);
};
}
}
var?friend?=?new?Person("Nicholas",?29,?"Software?Engineer");
friend.sayName();?????//這里加不加if語句有什么區(qū)別?下面是我對其他模式的理解幫我看看有什么問題,多多指正//工廠模式
function?createPerson(name,?age,?job){
var?o?=?new?Object();
o.name?=?name;
o.age?=?age;
o.job?=?job;
o.sayName?=?function(){
alert(this.name);
};
return?o;
}
var?person1?=?createPerson("Nicholas",?29,?"Software?Engineer");
var?person2?=?createPerson("Greg",?27,?"Doctor");
alert(person1.sayName==person2.sayName)?//false?函數(shù)內(nèi)部創(chuàng)建新對象?相當(dāng)于每次都創(chuàng)建了一個新函數(shù)//構(gòu)造函數(shù)
function?Person(name,?age,?job){
this.name?=?name;
this.age?=?age;
this.job?=?job;
this.sayName?=?function(){
alert(this.name);
};
}
var?person1?=?new?Person("Nicholas",?29,?"Software?Engineer");
var?person2?=?new?Person("Greg",?27,?"Doctor");
alert(person1==person2);//false??說明這是兩個對象??
alert(person1.sayName==person2.sayName);//true??屬性相等??說明外部創(chuàng)建新對象雖然獨立?但它們都同時指向同一個函數(shù)//原型模式
function?Person(){
}
Person.prototype.name?=?"Nicholas";
Person.prototype.age?=?29;
Person.prototype.job?=?"Software?Engineer";
Person.prototype.sayName?=?function(){
alert(this.name);
};
var?person1?=?new?Person();
var?person2?=?new?Person();
alert(person1.sayName?==?person2.sayName);?//true?每個函數(shù)都有一個原型對象?函數(shù)內(nèi)部的屬性叫對象屬相?是外部調(diào)用對象的屬性??而原型對象屬性函數(shù)本身擁有的屬性?它和函數(shù)本身相互聯(lián)系?外部創(chuàng)建實例化對象?可以讀取函數(shù)原型屬性//
function?Person(){
}
var?friend?=?new?Person();
Person.prototype?=?{
constructor:?Person,
name?:?"Nicholas",
age?:?29,
job?:?"Software?Engineer",
sayName?:?function?()?{
alert(this.name);?
}
};
friend.sayName();?//error?????friend指向的是修改前的地址?修改之后的地址?無法讀取?也就是說原型中的地址不會被覆蓋//
function?Person(){
}
Person.prototype?=?{
constructor:?Person,
name?:?"Nicholas",
age?:?29,
job?:?"Software?Engineer",
sayName?:?function?()?{
alert(this.name);
}
};
var?friend?=?new?Person();
friend.sayName();?//Nicholas???????friend指向兩個地址?修改前和修改后?依次讀取?相同屬性和方法進(jìn)行覆蓋//
function?Person(){
}
Person.prototype?=?{
constructor:?Person,
name?:?"Nicholas",
age?:?29,
job?:?"Software?Engineer",
friends?:?["Shelby",?"Court"],
sayName?:?function?()?{
alert(this.name);
}
};
var?person1?=?new?Person();
var?person2?=?new?Person();
person1.friends.push("Van");
alert(person1.friends?===?person2.friends);?//true?person1和person2讀取的是同一地址的原型?修改的其中一個的屬性?另一個也會發(fā)生改變//組合使用構(gòu)造函數(shù)和原型模式
function?Person(name,?age,?job){
this.name?=?name;
this.age?=?age;
this.job?=?job;
this.friends?=?["Shelby",?"Court"];
}
Person.prototype?=?{
constructor?:?Person,
sayName?:?function(){
alert(this.name);
}
}
var?person1?=?new?Person("Nicholas",?29,?"Software?Engineer");
var?person2?=?new?Person("Greg",?27,?"Doctor");
person1.friends.push("Van");
alert(person1.friends);?//"Shelby,Count,Van"
alert(person2.friends);?//"Shelby,Count"
alert(person1.friends?===?person2.friends);?//false?比較的是對象?false
alert(person1.sayName?===?person2.sayName);?//true?比較的是對象的地址?true
動態(tài)原形模式為什么要加if?
清風(fēng)流光
2017-04-26 14:06:21