[英]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.