如果我在原型上定义方法,我如何在构造函数中调用它们?

时间:2012-12-10 01:38:50

标签: javascript oop class constructor

我理解将方法直接分配给类的原型是很好的做法,这样每次调用函数时都不会重新定义它们。

var A = function () {
    this.prop = "A property";
}
A.prototype.method = function () {
    return "A method";
}

假设我想在构造函数中调用以这种方式定义的方法。这可能吗?

var A = function (options) {
    initialize(options); // initialize is undefined.
}
A.prototype.initialize = function (options) {
    // do something with options.
}

在构造函数中创建存根方法不起作用,因为它被调用而不是原型的函数版本。我能够让它工作的唯一方法是通过括号语法this["initialize"]()引用该函数,这似乎非常不优雅。

var A = function (options) {
    this["initialize"](options); // function isn't defined yet but will be soon!
}
A.prototype.initialize = function (options) {
    // do something with options.
}

这看起来很笨拙,可能不是调用此函数的最佳方式。 还有其他方法或我遗失了什么吗?

1 个答案:

答案 0 :(得分:6)

你的最后一种方式是正确的,但你不需要引号。

var A = function (options) {
    this.initialize(options); 
};
A.prototype.initialize = function (options) {
    // do something with options.
};

假设A被调用为构造函数,this是对正在构造的新对象的引用,并且其原型链已经建立,因此它已经可以访问initialize方法

当然,并不要求initialize成为原型。如果它不打算不止一次被调用,那么将它定义为独立函数可能更有意义。

var A = function (options) {
    initialize(this, options); 
};
function initialize (obj, options) {
    // do something with options.
};

或者你可以把初始化代码放在构造函数中。