假设我有一个 Javascript 对象(大括号表示它是这样的):
{
a: function (something) {
return something*2;
},
b: function () {
var c = this.a(2); //Does not work. Why?
return c;
}
}
解决方法是什么?
假设我有一个 Javascript 对象(大括号表示它是这样的):
{
a: function (something) {
return something*2;
},
b: function () {
var c = this.a(2); //Does not work. Why?
return c;
}
}
解决方法是什么?
它不起作用,因为当您访问方法时b
,它的上下文不是您创建的对象的实例,它会尝试在绑定的上下文或window
对象中搜索。
var x = {
a: function (something) {
return something*2;
},
b: function () {
var c = x.a(2); //Does not work. Why?
return c;
}
}
这样,您就可以使用x
as 上下文来访问方法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
from x
,但你的代码可以工作。
例子:
var y = new x();
console.log(y.b());
它对我有用,你在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());