我真的无法理解Node.js中的'this'

时间:2018-04-22 02:21:37

标签: node.js

我无法理解Readable.call(this)中的'this'以及它们是如何工作的。请解释一下!

var Readable = require('stream').Readable;
var util = require('util');

function Counter() {
    Readable.call(this);
    this._max = 1000;
    this._index = 1;
}
util.inherits(Counter, Readable);

Counter.prototype._read = function () {
    var i = this._index++;
    if (i > this._max)
        this.push(null);
    else {
        var str = ' ' + i;
        this.push(str);
    }
};

1 个答案:

答案 0 :(得分:0)

在ES5中,Readable.call(this);是从派生构造函数调用基类的构造函数的方法。

这样做是告诉解释器调用Readable()函数并将该函数中的this指针设置为指向新创建的对象的this。然后,在执行构造函数的其余部分之前以及将新创建的对象返回给调用者之前,这允许基本构造函数初始化其对象部分。

使用这个方案,有一个对象,构造函数从上到下执行(首先是基础对象构造函数,然后是派生对象构造函数,但它只能这样工作,因为每个构造函数在执行任何构造函数之前调用其基本构造函数的约定自己的代码。

使用ES6类声明,您只需使用super();,解释器就会为您处理细节。 ES6中super()的用户强制您在调用this之前甚至无法在构造函数中引用super()(这将导致错误)。

有关调用函数时如何设置this指针的更多信息,请参阅How this is set for functions。而且,您可以阅读.call() here on MDN