为什么这个简单的Object.create示例不起作用?

时间:2013-12-06 03:02:59

标签: javascript ecmascript-5 prototypal-inheritance

下面的代码说对象没有方法呵呵

var A = function () {
                this.hehe = function () { };
            };
var B = function () {};
B.prototype = Object.create(A.prototype, {
                constructor: {
                    value: B,
                    enumerable: false,
                    writable: true,
                    configurable: true
                }
            });
var _b = new B();
    _b.hehe();

3 个答案:

答案 0 :(得分:2)

如果您希望B有权访问该功能,您需要在A的原型中定义它。

A.protototype.hehe = function(){
 //do something
};

b。

中也缺少对父母构造函数的调用

有了这个。他的每一个实例都得到了它自己的hehe函数,因此不在原型中。

同样更好地实现原型不合理如下 - 这是我所知道的意见问题。

function __extends(child,parent){ //Global function for inheriting from objects

    function Temp(){this.constructor = child;} //Create a temporary ctor
    Temp.prototype = parent.prototype; 
    child.prototype = new Temp(); //Set the child to an object with the child's ctor    with the parents prototype
}

var B = (function(_parent){
__extends(B,A);

function B(){

 _parent.call(this);
 }

})(A);

答案 1 :(得分:1)

你应该传递一个A的实例作为原型,而不是A的原型。

即。你应该打电话给你的创建电话应该看起来像Object.create(new A(), ...

答案 2 :(得分:0)

hehe()不是A.prototype的成员;它是构造函数中指定的每个A实例的属性。

由于您从未致电A构造函数,_b没有。

您需要在派生构造函数中调用基础构造函数:

A.call(this);