var aaa = {
bbb: {
ccc: function(){
alert(this);
alert(aaa.eee);
}
},
eee: '字串eee'
};
aaa.bbb.ccc();
如果我執行 aaa.bbb.ccc()
會顯示以下2個值
[object Object]
字串eee
我想請問:
如何在 ccc() 方法內取得該 this 物件的名稱,
而不是顯示 [object Object]
在 ccc() 方法內可以用 aaa.eee 取得 eee 屬性的值,
請問有沒有類似用 this 的關鍵字的方法,
可以不指定 aaa 的名稱來取得 aaa 物件呢
另外,2的話要透過constructor來做,我把你的例子改成ES6 classes語法(不過這樣有些瀏覽器可能還不支援):
https://jsfiddle.net/fillano/pyLuuxox/
傳統的constructor做法也可以,關鍵都在closure。
謝謝 fillano 大,我想要的不是您說的那樣。
問題 1 的部分,
我是想在 ccc 方法的程式碼內就取得呼叫 ccc 方法的物件名稱(也就是 this 指向的物件名稱),
比如這樣寫:
ccc: function(){
alert('bbb');
}
但如果之後我要更改 bbb 這個名稱,
就變成還要更改 ccc 內的程式碼,
所以想說有沒有方式可以取得 this 所指向的物件名稱。
問題 2 的部分用 aaa.eee 取得 eee 屬性的值
但以後要更改 aaa 名稱的話也是要更改內部程式碼
所以也想了解有沒有方法可以在 ccc 方法內取得 aaa 物件
就好像在函數內 arguments.callee 可以取得擁有該 arguments 的函數,
而不用直接寫函數名稱,
我想知道問題 1 與 2 是否有類似這樣的方式
首先aaa.bbb.eee() 中弹出的 this 是 bbb 这个对象.js 中的this是在执行时能被确认,如果你想在 eee中得到 aaa,那么你可以用 call/appaly/bind 这些方法去绑定运行时的this。