在Javascript中使用Object.create继承

时间:2013-11-04 14:12:39

标签: javascript inheritance

我试图执行一个样本来理解继承。 B级继承自A. 成功执行的示例必须显示两个警报..

但是没有工作.. 我以MDN为例。

代码如下

function A(a){
    this.varA =a;
}
A.prototype={
    varA:null,
    doSomething:function(){
        alert( "A invoked");
    }
}

function B(a,b){
    A.call(this,arguments);
    this.varB = b;
}

B.prototype = Object.create(A.prototype,
                            varB : {
                            value: null, 
                            enumerable: true, 
                            configurable: true, 
                            writable: true 
                            },
                          doSomething:{
                          value:function(){ 
                              A.prototype.doSomething.apply(this,arguments);
                              alert("B invoked);
                          },
                          enumerable:true,
                          configurable:true,
                          writable:true                    
                         });


                   var a =new A(1);
                   a.doSomething( );
                   var b = new B(1,2);
                   b.doSomething( );

2 个答案:

答案 0 :(得分:0)

您错过了此行"

上的结束alert("B invoked);

修改

我在这里更新了你的小提琴:http://jsfiddle.net/LmUXw/31/

你有一些拼写错误/语法错误。我建议您使用开发人员控制台(Chrome中的F12,然后按console标签)并查看记录到它的错误。如果单击行号链接,它将在控制台窗口中显示它,您可以看到导致问题的行。

答案 1 :(得分:0)

我最初整理了代码,但是我已经推回了我的更改,因为在整理过程中我修复了其中一个错误!

错误是:

  1. alert("B invoked);需要关闭"
  2. Object.create来电中,您遗漏了声明对象字面值的{}
  3. 代码应为:

    B.prototype = Object.create(A.prototype, {
        varB: {
            value: null,
            enumerable: true,
            configurable: true,
            writable: true
        },
        doSomething: {
            value: function () {
                A.prototype.doSomething.apply(this, arguments);
                alert("B invoked");
            },
            enumerable: true,
            configurable: true,
            writable: true
        }
    });
    

    请注意,此代码比您的代码更整洁。体面缩进和格式化(以及语法突出显示)对理解代码和错误有很大的不同。