亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

動態原形模式為什么要加if?

動態原形模式為什么要加if?

清風流光 2017-04-26 14:06:21
//動態原形模式 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語句有什么區別?下面是我對其他模式的理解幫我看看有什么問題,多多指正//工廠模式 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?函數內部創建新對象?相當于每次都創建了一個新函數//構造函數 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??屬性相等??說明外部創建新對象雖然獨立?但它們都同時指向同一個函數//原型模式 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?每個函數都有一個原型對象?函數內部的屬性叫對象屬相?是外部調用對象的屬性??而原型對象屬性函數本身擁有的屬性?它和函數本身相互聯系?外部創建實例化對象?可以讀取函數原型屬性// 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指向兩個地址?修改前和修改后?依次讀取?相同屬性和方法進行覆蓋// 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讀取的是同一地址的原型?修改的其中一個的屬性?另一個也會發生改變//組合使用構造函數和原型模式 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
查看完整描述
  • 2 回答
  • 0 關注
  • 2056 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號