第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

不理解原型鏈的set/get部分

我在IDE嘗試的時(shí)候,試了這樣的方式,發(fā)現(xiàn)是可以直接改原型鏈的值?

var foo = {}

foo.x = 1

var obj = Object.create(foo)

console.log("inherit from foo"+obj.hasOwnProperty('x')) //false,所以說(shuō)明obj遺傳了foo的x

console.log(obj.x)//1

obj.x = 2//照理說(shuō)這樣是沒(méi)辦法改變foo的值?

console.log(obj.x)//可是變成了2


我的問(wèn)題是,那是不是只有用defineProperty創(chuàng)建的原型鏈屬性會(huì)無(wú)法被賦值?

正在回答

2 回答

var?foo?=?{};
foo.x?=?1;
var?obj?=?Object.create(foo);
obj.x?=?2;
//這里能給予賦值是很正確的,可以通俗理解為obj和foo都是普通對(duì)象,普通對(duì)象當(dāng)然能給自己添加屬性賦值
//只是obj這個(gè)家伙偷懶‘引用’了foo的屬性。但不影響obj有權(quán)利隨意給自己添加屬性不受你foo的限制,
//所以obj.x可以隨意賦值,但注意其實(shí)這沒(méi)有改變foo.x的值

var?foo?=?{};
Object.defineProperty(foo,'x',{value:1});
var?obj?=?Object.create(foo);
//這里就不一樣了,Object.defineProperty()就是皇上的圣旨,給了foo特權(quán),這個(gè)特權(quán)就是obj必須服從
//foo的指揮,只要foo說(shuō)x是什么樣子,那obj的x就是什么樣子,所以這里不管obj.x賦值是多少對(duì)不起你都
//和foo.x的值一樣;

//obj.x想要翻身當(dāng)主人怎么辦??當(dāng)然還是需要Object.defineProperty()給的圣旨才行;
Object.defineProperty(obj,'x',{value:2});

在這個(gè)畫(huà)面的前2分鐘講了set/get會(huì)改變?cè)玩溤L(fǎng)問(wèn)的方式,里面有提及Object.defineProperty()在
原型鏈中的特殊作用?;

或許不完全正確,供你參考吧


6 回復(fù) 有任何疑惑可以回復(fù)我~
#1

小A_ 提問(wèn)者

非常感謝!
2016-05-19 回復(fù) 有任何疑惑可以回復(fù)我~

不知道還在不,借用樓上的例子,foo可以理解是obj的父對(duì)象,foo中的屬性,obj都會(huì)拷貝到自己哪里,但這是拷貝的,所以有初值,所以修改obj.x的值不會(huì)影響到foo.x的值。這和值類(lèi)型類(lèi)似。

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消
JavaScript深入淺出
  • 參與學(xué)習(xí)       281095    人
  • 解答問(wèn)題       1054    個(gè)

由淺入深學(xué)習(xí)JS語(yǔ)言特性,且解析JS常見(jiàn)誤區(qū),從入門(mén)到掌握

進(jìn)入課程

不理解原型鏈的set/get部分

我要回答 關(guān)注問(wèn)題
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)