Javascript js:方法can';t访问属性
在JavaScript中,让我困惑的是:在下面的代码中,我有一个包含一个属性的对象构造函数。下面,我添加了一些原型方法。方法“method1”可以访问“this.property”,并且返回值30。方法“combine”只调用“method1”,但它返回NaN。似乎“this.property”在第一次通话中是公开的,但在第二次通话中不是公开的。为什么会有这种奇怪的行为Javascript js:方法can';t访问属性,javascript,oop,scope,prototype,Javascript,Oop,Scope,Prototype,在JavaScript中,让我困惑的是:在下面的代码中,我有一个包含一个属性的对象构造函数。下面,我添加了一些原型方法。方法“method1”可以访问“this.property”,并且返回值30。方法“combine”只调用“method1”,但它返回NaN。似乎“this.property”在第一次通话中是公开的,但在第二次通话中不是公开的。为什么会有这种奇怪的行为 var ObjBuilder = function() { this.property = 3; }; ObjBuild
var ObjBuilder = function()
{
this.property = 3;
};
ObjBuilder.prototype = function()
{
var method1 = function()
{
return this.property * 10;
}
var combine = function()
{
return method1() + 2;
}
return {method1: method1,
combine: combine};
}();
// instantiate an object and call its methods
var obj = new ObjBuilder();
console.log(obj.method1());//prints 30
console.log(obj.combine());//prints NaN. WHY???
我认为您的问题在于,
combine
只是调用method1
函数(例如,不是this.method1
),因此,this.property*10中的this
调用method1
中的this
没有像您期望的那样绑定,并且可能绑定到全局对象。我想您的问题是combine
只调用method1
函数(例如,不是this.method1
),因此,this.property*10中的this
调用method1
中的this
没有像您预期的那样绑定,并且可能绑定到了全局对象。如果您在method1
中记录this
,然后在combine
中调用它,您将看到problem@t.niese-窗口
。您必须将其称为this.method1()
以提供此
上下文。如果您在method1
内部记录this
,然后在combine
内部调用它,您将看到problem@t.niese-窗口
。您必须将其称为this.method1()
以提供此
上下文。