亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

javascript中的this問題,幫幫忙。

javascript中的this問題,幫幫忙。

慕尼黑8549860 2019-04-19 16:29:34
functionA(){this.age=100;}A.prototype={constructor:A,sex:this.age,click:function(){returnthis.age;}};vara=newA();console.log(a.sex);//undefinedconsole.log(a.click());//100為什么a.sex沒有值,而click()卻可以?原理上是怎么回事,最后不都是指向a對象么?A。prototype之后不應該等之后不應該等同于A.prototype={constructor:A,sex:this.age,click:function(){...}};這樣嗎?寫A.prototype={}的時候,你并沒有去擴展A.prototype,而是用一個新的對象自變量重寫了A.prototype,而這個新的對象字面量創建于window之下,于是里面的this.xxx自然不可能指向你設想的a?網上看到的解釋,但是不懂什么叫拓展,這樣怎么就成了新的對象自重寫了?
查看完整描述

2 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

注釋:新手忽視這一段。以一下說的都是ES5.1且沒有用usestrict在更高的版本中兼容,但是新定義的東西有些許區別,不過也只是ES5.1的語法糖。(先不討論,call,apply,bind)1、this這個是在運行時,函數調用的時候決定次函數中的this等于什么的。首先函數是一個對象,跟其他對象/變量沒有本質的區別,所以一個函數可以賦值給一個變量或是一個對象的屬性,可以通過這個變量或是對象的屬性調用這個函數。那么在寫代碼的時候函數調用可以分為兩種寫法function_name();object.function_name()后一種包括obj1.obj2.function_name()的形式。第一種寫法this的值是window,第二種情況,this的值就是function_name前面那個對象,而不管你實際的代碼寫在那里,值關心你調用函數時的寫法。但是對于你這種情況,this不在任何函數中,那么this的值就是window。所以sex的值是window.age也就是undefined,所以,不是不能訪問,而是,就是undefined
了解更多,可以繼續往下讀。不過不太好理解,多度幾遍。
2、其實還存在一種this其實函數調用還存在一種形式,那就是newfunctioin_name()這個時候瀏覽器會創建一個新的對象,并且給這個對象添加用js代碼不可訪問的屬性[[prototype]](先不討論如何訪問他的問題)。這個屬性值就等于function_name.prototype。然后this就等于新創建的對象,然后運行函數中定義的代碼。new的返回值就是這個新創建的對象(js太麻煩了,先不討論其他情況)。
3、原型鏈上面說道new的時候會創建一個新的對象,并且給一個內部屬性賦值為函數的prototype,所以新創建的這個對象有一個[[prototype]]屬性,某些當然[[prototype]]也可能存在[[prototype]]屬性。那么一個對象就有這樣的屬性obj.[[prototype]].[[prototype]].[[prototype]]...而他的值就是它構造函數的prototype屬性,叫做原型鏈。那么當我們"讀取"對象的屬性的時候,其實讀取的是
if(obj.prop)returnobj.prop
elseif(obj.[[prototype]].prop)returnobj.[[prototype]].prop;
elseif(obj.[[prototype]].[[prototype]].prop)returnobj.[[prototype]].[[prototype]].prop;
......一直這樣找下去
else{returnundefined;}
但是寫入的時候就是就不會從原型鏈里面查找,僅僅會賦值obj.prop
                            
查看完整回答
反對 回復 2019-04-19
  • 2 回答
  • 0 關注
  • 435 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號