2013-11-04 60 views
-1

我試圖執行一個樣本來理解繼承。 B類從A 成功執行的例子必須證明兩個警報繼承..用Object.create在Javascript中繼承

但不工作.. 我已經採取了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(); 
+0

您的'B'的構造函數應該使用'A.apply'而不是'A.call'。 – Matt

+0

@Matt我更改爲A.apply ..但仍然沒有,噸工作... http://jsfiddle.net/visibleinvisibly/LmUXw/30/..s示例代碼 – visibleinvisibly

回答

0

你在這一行缺少一個右"alert("B invoked);

編輯

我在這裏更新您的提琴:http://jsfiddle.net/LmUXw/31/

你有幾個錯字/語法錯誤。我可以建議您使用開發人員控制檯(Chrome瀏覽器中的F12,然後按console選項卡),並查看記錄到它的錯誤。如果你點擊行號鏈接,它會在控制檯窗口中顯示它,你可以看到哪一行導致了問題。

+0

@ ed-hinchliffe你是對的..我添加分號... – visibleinvisibly

0

我最初整理了代碼,但是我已經將我的更改回滾了,因爲在整理過程中我修復了其中一個錯誤!

的錯誤是:

  1. alert("B invoked);需要關閉"
  2. 在您的通話Object.create,你缺少的是申報對象文本的{}

的代碼應閱讀:

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 
    } 
}); 

注意,該代碼比你的代碼顯著整潔。體面縮進和格式化(以及語法突出顯示)對理解您的代碼和錯誤有很大的幫助。

+0

@lonseomeday將在下一次張貼之後張貼 – visibleinvisibly