Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript js:方法can';t访问属性_Javascript_Oop_Scope_Prototype - Fatal编程技术网

Javascript js:方法can';t访问属性

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

在JavaScript中,让我困惑的是:在下面的代码中,我有一个包含一个属性的对象构造函数。下面,我添加了一些原型方法。方法“method1”可以访问“this.property”,并且返回值30。方法“combine”只调用“method1”,但它返回NaN。似乎“this.property”在第一次通话中是公开的,但在第二次通话中不是公开的。为什么会有这种奇怪的行为

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()
以提供
上下文。