【问题标题】:Use $.extend() for prototypal inheritance?使用 $.extend() 进行原型继承?
【发布时间】:2012-02-19 21:33:51
【问题描述】:

也许这是一个疯狂的问题,但类似于:

var MyPrototypeObject {
    prop: 0;
};    
var ob1 = Object.create(MyPrototypeObject);
var ob2 = { 
    meth: function() { 
        this.prop = 5; // update prop 
        return this.prop;
    }
};

Object.create 克隆原型,$.extend 用于向ob1 添加附加方法,其中this.prop 指向原型?添加新方法的最佳方式是什么?

$.extend(ob1, ob2);

相关:Override Methods with Prototypal Inheritance.

【问题讨论】:

    标签: javascript jquery oop inheritance prototypal-inheritance


    【解决方案1】:

    pd-style类似,推荐

    var SomeProto = {
        prop: 0;
    };    
    
    var ob1 = extend(Object.create(SomeProto), { 
        meth: function meth() { 
            return (this.prop = 5); // update prop 
        }
    });
    

    这是在 JavaScript 中处理 OO 的有效方法。请注意,$.extend 是一个糟糕的实现,因为它有一个 isPlainObject 检查,对于具有原型的对象返回 false

    【讨论】:

    • 见鬼! =] 在那个设置中你可以在SomeProto 中使用this 吗?除非我尝试在SomeProto 的方法中使用this,否则我让它工作了。我不应该这样做吗?
    • @ryanve 当然。请注意,this !== SomeProtoSomeProto 中是您在调用方法时传入的任何 this 上下文。
    • 很好,正是,这就是我想要的。我一定是在别处搞错了。
    猜你喜欢
    • 1970-01-01
    • 2012-07-14
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 2015-07-07
    相关资源
    最近更新 更多