簡體   English   中英

JavaScript 原型和這個繼承

[英]JavaScript prototype and this inheritance

下面是一個來自 Javascript is Sexy 網站的例子:

function People () {
​this.superstar = "Michael Jackson";
}

People.prototype.athlete = "Tiger Woods";

​// Define "athlete" property on the People prototype so that "athlete" is
// accessible by all objects that use the People () constructor.

我的問題:people.prototype.athlete繼承屬性 athlete 之間有什么區別,就像在 People 構造函數this.athlete="Tiger Woods"; .

在評論中,它說所有使用People ()構造函數的對象都可以訪問athlete

但是當我把這個屬性 athlete 像我說的那樣放在 people 構造函數中時,它也可以被所有使用People ()構造函數的對象訪問。

1 和 2 有什么區別?

//1
function People () {
​this.superstar = "Michael Jackson";
}
People.prototype.athlete = "Tiger Woods";

//2
function People () {
​this.superstar = "Michael Jackson";
this.athlete = "Tiger Woods"; 
}

當我使用示例 #1 創建對象時:

var person = new People();
console.log(person.hasOwnProperty('superstar')); //TRUE
console.log(person.hasOwnProperty('athlete'));  // FALSE

我知道athlete財產不歸person對象所有。

但是其他的區別是什么?

簡短回答:內存共享。

因為prototype只持有一次"Tiger Woods"值,另一方面, People每個實例對於superstar都有自己的值。 在這種情況下,我認為內存通常用字符串優化(如果我錯了,請糾正我),但如果它是一個對象,例如,那將是一個不同的故事,每次你實例化People時都會定義一個新對象。

此外,如果您修改People.prototype.athlete ,則People (任何地方)的任何實例的每個默認值都將是新定義的值(如果您通過instance.athlete為一個或多個實例覆蓋它,那么沒關系) .

暫無
暫無

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

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