iT邦幫忙

0

javascript 取得物件名稱

samjam 3 月前5134 瀏覽
var aaa = {
	bbb: {
		ccc: function(){
			alert(this);
			alert(aaa.eee);
		}
	},
	eee: '字串eee'
};
aaa.bbb.ccc();

如果我執行 aaa.bbb.ccc()
會顯示以下2個值
[object Object]
字串eee

我想請問:

  1. 如何在 ccc() 方法內取得該 this 物件的名稱,
    而不是顯示 [object Object]

  2. 在 ccc() 方法內可以用 aaa.eee 取得 eee 屬性的值,
    請問有沒有類似用 this 的關鍵字的方法,
    可以不指定 aaa 的名稱來取得 aaa 物件呢

fillano iT邦超人 1 級 ‧ 3 月前 檢舉
你所謂的「物件的名稱」是指?
froce iT邦新手 4 級 ‧ 3 月前 檢舉
應該就是"aaa"吧
samjam iT邦新手 5 級 ‧ 3 月前 檢舉
您好:
因為問題 1 內的 this 只能取得 bbb 這個物件
用 alert(this) 只會顯示 [object Object]
我想要知道如何用 alert()可以顯示出 bbb 這個名稱
而不是顯示 [object Object]

2 個回答

1
fillano
iT邦超人 1 級 ‧ 3 月前
最佳解答
看更多先前的回應...收起先前的回應...
fillano iT邦超人 1 級 ‧ 3 月前 檢舉

另外,2的話要透過constructor來做,我把你的例子改成ES6 classes語法(不過這樣有些瀏覽器可能還不支援):
https://jsfiddle.net/fillano/pyLuuxox/

傳統的constructor做法也可以,關鍵都在closure。

samjam iT邦新手 5 級 ‧ 3 月前 檢舉

謝謝 fillano 大,我想要的不是您說的那樣。
問題 1 的部分,
我是想在 ccc 方法的程式碼內就取得呼叫 ccc 方法的物件名稱(也就是 this 指向的物件名稱),
比如這樣寫:

ccc: function(){
	alert('bbb');
}

但如果之後我要更改 bbb 這個名稱,
就變成還要更改 ccc 內的程式碼,
所以想說有沒有方式可以取得 this 所指向的物件名稱。

samjam iT邦新手 5 級 ‧ 3 月前 檢舉

問題 2 的部分用 aaa.eee 取得 eee 屬性的值
但以後要更改 aaa 名稱的話也是要更改內部程式碼
所以也想了解有沒有方法可以在 ccc 方法內取得 aaa 物件

samjam iT邦新手 5 級 ‧ 3 月前 檢舉

就好像在函數內 arguments.callee 可以取得擁有該 arguments 的函數,
而不用直接寫函數名稱,
我想知道問題 1 與 2 是否有類似這樣的方式

fillano iT邦超人 1 級 ‧ 3 月前 檢舉

沒有。javascript的函數並不是綁死在物件上,而是呼叫時才決定this。

var a = {
    val: 'value from a',
    show: function() {
        alert(this.val);
    }
};
var b = {
    val: 'value from b'
};
b.say = a.show;
b.say();//顯示'value from b'
fillano iT邦超人 1 級 ‧ 3 月前 檢舉

嗯,上面這樣講好像也不太對XD,總之就是語言本身沒有你想要的這個機制。

samjam iT邦新手 5 級 ‧ 3 月前 檢舉

好的,我了解了,謝謝 fillano 大的回答。

0
onejustone
iT邦新手 5 級 ‧ 2 月前

首先aaa.bbb.eee() 中弹出的 this 是 bbb 这个对象.js 中的this是在执行时能被确认,如果你想在 eee中得到 aaa,那么你可以用 call/appaly/bind 这些方法去绑定运行时的this。

我要發表回答

立即登入回答