【问题标题】:Prototypical Chaining in JavaScriptJavaScript 中的原型链
【发布时间】:2016-04-10 11:15:30
【问题描述】:

当前每次调用 makeMoney 方法时都尝试将 $1 添加到我的 Tween 中,但我收到一个错误,即 makeMoney 方法不是函数。我有一种预感,它与this 有关,但我试图将“this”绑定到 makeMoney 方法无济于事。这确实看起来应该很简单,但我却空无一物。

var Tween = function() {
    Adolescent.call(this);
    this.age  =  12;
    this.job = 'annoy';
    this.allowance = 5;

};
Tween.prototype.makeMoney = function(){

    return this.allowance ++;
}

Tween.prototype = Object.create(Adolescent.prototype);
Tween.prototype.constructor = Tween;

【问题讨论】:

    标签: javascript inheritance prototype this code-reuse


    【解决方案1】:

    您在这里所做的首先是向 Tween 对象的原型添加函数,然后用Object.create(Adolescent.prototype) 覆盖整个原型对象。这就是它未定义的原因。

    而是在扩展原型之前进行继承。

    var Tween = function() {
        Adolescent.call(this);
        this.age  =  12;
        this.job = 'annoy';
        this.allowance = 5;
    
    };
    
    Tween.prototype = Object.create(Adolescent.prototype);
    Tween.prototype.constructor = Tween;
    
    Tween.prototype.makeMoney = function(){
    
        return this.allowance ++;
    }
    

    【讨论】:

    • 有趣。我不认为安置会很重要。显然这很重要,但从概念上讲为什么?
    • 嗯,这很合乎逻辑。首先,您要进行继承,然后扩展原型。 Object.create 创建一个新对象,这是这里的底线
    • @DLF85:记住prototype 只是一个属性(new 运算符使用的属性,但仍然只是一个无聊的旧属性),附加到它的东西只是一个对象.默认情况下,函数在那里有一个对象,我们必须替换它(为了设置继承)。所以就像a = {}; a.foo = "bar"; a = {}; 意味着我们最终会在a 上得到一个没有foo 属性的对象...
    猜你喜欢
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2016-04-03
    • 2018-01-19
    • 2019-02-03
    • 1970-01-01
    相关资源
    最近更新 更多