假设我有一个Javascript对象(花括号表明它是这样的):
{
a: function (something) {
return something*2;
},
b: function () {
var c = this.a(2); //Does not work. Why?
return c;
}
}
对此有哪些解决方法?
答案 0 :(得分:2)
它不起作用,因为当您访问方法b
时,它的上下文不是您创建的对象的实例,它将尝试在绑定的上下文或window
对象中进行搜索。
var x = {
a: function (something) {
return something*2;
},
b: function () {
var c = x.a(2); //Does not work. Why?
return c;
}
}
这样您就可以使用x
作为上下文来访问方法a
。
或者您可以使用new
运算符来创建对象和方法作为原型或直接方法。
当你这样做时,结果将是:
var x = function() {
return {
a: function (something) {
return something*2;
},
b: function () {
var c = this.a(2); //Does not work. Why?
return c;
}
}
}
当你创建一个新实例时,它会让你从prototype
丢失x
,但你的代码会有效。
示例:
var y = new x();
console.log(y.b());
答案 1 :(得分:1)
它适用于我,在a
声明之后你错过了昏迷。
{
a: function (something) {
return something*2;
}, // -> this one
b: function () {
var c = this.a(2);
return c;
}
}
如果您致电b
,该功能应返回a(2)
,即2 * 2 = 4
alert(p.b());