为什么我不能通过其原型访问类中“this”的属性?

时间:2017-11-26 17:05:52

标签: javascript ecmascript-6 prototype es6-class

我写了这个类,并为它设置了一个数组属性。然后,我想在这个数组中添加一个项目。

但是,当我尝试这样做时,我收到错误“未捕获TypeError:无法读取push的属性undefined”。

这不可能吗?



class test {
  constructor() {
    this.myArray = [];
  }

  myMethod() {
    this.myArray.push("ok");
  }
};

console.log(test.prototype.myMethod());




3 个答案:

答案 0 :(得分:5)

这不是如何使用类。您需要先使用test实例化new test()。在您的案例中从未调用constructor,因此this.myArray从未定义过。

这是唯一可行的方法:

let testInstance = new test();

testInstance.myMethod();

这样,constructor被调用,没有错误。

当然,接下来你需要一些方法来检索你的数组,以便看到效果。

答案 1 :(得分:1)

尝试先创建实例。请参阅我详细评论过的代码

var test = function(){
  this.myArray = [];
}
test.prototype = { // add our custom constructor and custom methods
  constructor: test,
  myMethod: function() {
    this.myArray.push("ok");
  }
};

var myVar = new test(); // create new instance of test
myVar.myMethod(); // run custom method to push val
console.log( myVar.myArray );



{{1}}




答案 2 :(得分:1)

您需要先启动课堂测试。

var t = new test();

供您参考:

console.log(test.prototype.myMethod()); 

会给你" undefined"。尝试例如:

var t = new test();
t.myMethod();
console.log(t.myArray);

获得类似于此的输出:

Array [ "ok" ]