簡體   English   中英

在構造函數中使用“ this”與“ .prototype”

[英]Using “this” versus “.prototype” inside the constructor function

有人可以使用構造函數來說明下面兩個代碼的區別。 它們都給出相同的結果。 一個人比另一個人有優勢嗎?

function Person(){
  Person.prototype.name = "Nicholas";
  Person.prototype.age = 29;
}

var person1 = new Person();
var person2 = new Person();

person1.name = "Greg";
alert(person1.name);   //"Greg"  from instance
alert(person2.name);   //"Nicholas" from prototype

function Person(){
  this.name = "Nicholas";
  this.age = 29;
}

var person1 = new Person();
var person2 = new Person();

person1.name = "Greg";
alert(person1.name);   // "Greg"  from instance
alert(person2.name);   // "Nicholas" from Person Object?     

他們正在做一些不同的事情。

第一個是在每次構造函數調用時為原型分配相同的詳細信息。 這些細節將由通過此構造函數創建的每個對象共享。 這絕對不是您應該做的。 通常,僅應將方法添加到原型中,並且絕對不要在構造函數的主體內添加方法。 它應該在構造函數之外發生(它只是在不必要地運行無意義的代碼,並且會使其他開發人員感到困惑)。

第二,這些屬性對於返回的構造對象是本地的,在這種情況下就是this 這是擁有實例屬性的正確方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM