我有这样的功能:
this.doStuff({
'testkey': {
testfunction: function() {
// will return testfunction
console.log(Object.keys(this));
}
}
});
是否有办法让testkey
进入测试功能范围?
Object.keys(this)
将返回testfunction
。
答案 0 :(得分:2)
JavaScript this
关键字有点不寻常的野兽 - 它会根据函数的调用方式而改变,而且大部分时间this
都会引用在里面发挥作用。在这种情况下,这只是testfunction
,所以它自然只能为您提供该功能的本地结果。
有各种关于理解此的教程:
this
keyword this
operator reference 在您的方案中,Object.keys()获取一个对象并返回其键。如果你想要object
的密钥,你需要给它(我已经重命名了你的变量):
var foo = {
'key': {
func: function() {
console.log(Object.keys(foo)); // <------
}
}
};
答案 1 :(得分:2)
如果您知道在javascript对象中调用哪种方法,那么您可以这样做。
您可以使用apply或call方法
保留调用者的范围
function doStuff(ob){
ob[Object.keys(ob)]['testfunction'].call(ob);
}
doStuff({
'testkey': {
testfunction: function() {
// will return testkey
console.log(Object.keys(this));
}
}
});
&#13;
答案 2 :(得分:1)
var object = {
'testkey': {
testfunction: function() {
// will return testfunction
console.log(Object.keys(object));
}
}
};
因为在函数范围内你可以看到全局var&#39; object&#39;