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

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

函數對象在原型鏈查找屬性時是先查找函數自身的prototype的屬性還是先找Function.prototype的屬性?

函數對象在原型鏈查找屬性時是先查找函數自身的prototype的屬性還是先找Function.prototype的屬性?

慕粉3428670 2017-03-11 09:52:28
我們知道,函數對象都是由Function創建的,即函數對象都是Function對象的實例。如數組對象Array是Function的實例,Array對象生成時,繼承了Function.prototype的屬性。 但Array也有自己的原型對象Array.prototype,那么Array對象的實例(如arr = new Array()), arr在原型鏈上查找屬性時是先查找Array.prototype的屬性,還是先查找Function.prototype的屬性?
查看完整描述

3 回答

已采納
?
西蘭花偉大炮

TA貢獻376條經驗 獲得超318個贊

Function.prototype.haha?=?"foo"
"foo"
Array.prototype.haha?=?"fun"
"fun"
var?arr?=?new?Array()
undefined
arr.haha
"fun"

應該是這個意思

查看完整回答
1 反對 回復 2017-03-11
  • 慕粉3428670
    慕粉3428670
    我大概明白了。函數都是由Function對象創建的,而函數可以new出一個實例對象,但new出來的只是一個對象,并不是函數,所以new出來的實例對象不能使用Function.prototype的屬性和方法(caller、apply()、call()等)。要使用Function.prototype的屬性和方法,屬性和方法前面必須是一個函數對象,如function Fn1(){...}, function Fn2(){....}, var fn = new Fn1(); Fn2.apply(fn); //fn是Fn1的實例,通過apply可以使用函數Fn2。
?
微小唯

TA貢獻2條經驗 獲得超0個贊

先查找Array.prototype,再是查找,下次你可以在控制臺調試,調試代碼可以如下:

var ?arr=new Array();

console.log(arr.__proto__);

console.log(arr.__proto__.__proto__)

查看完整回答
反對 回復 2017-03-11
  • 慕粉3428670
    慕粉3428670
    按照原型鏈,arr永遠不會查詢到Function.prototype的屬性和方法。[抱拳]
?
慕粉3428670

TA貢獻1條經驗 獲得超0個贊

我覺得問題應該是:用Function對象 生成函數實例時,Function.prototype上的屬性是否會自動添加到生成的函數實例上?

查看完整回答
反對 回復 2017-03-11
  • 3 回答
  • 0 關注
  • 2174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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