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

為了賬號安全,請及時綁定郵箱和手機立即綁定

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

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

var foo = {}

foo.x = 1

var obj = Object.create(foo)

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

console.log(obj.x)//1

obj.x = 2//照理說這樣是沒辦法改變foo的值?

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


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

正在回答

2 回答

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

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

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

在這個畫面的前2分鐘講了set/get會改變原型鏈訪問的方式,里面有提及Object.defineProperty()在
原型鏈中的特殊作用?;

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


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

小A_ 提問者

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

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

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

舉報

0/150
提交
取消
JavaScript深入淺出
  • 參與學(xué)習(xí)       281098    人
  • 解答問題       1048    個

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

進入課程

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

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

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號

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