2014-07-24 192 views
0

http://jsfiddle.net/hzC78/7/擴展類實例函數

var ArrayExtension = { 
    foo: function(){ 
     return "bar" 
    } 
} 

$.extend(Array, ArrayExtension); 

var array = ['zero','one','two']; 

console.log('From class: ' + ArrayExtension.foo()); // bar 
console.log('From extended original class: ' + Array.foo()); // bar 
console.log('From instance of original class: ' + array.foo()); // undefined is not a function, expected 'bar' 

更新:

extend方法似乎工作。 Array現在包括運行,返回bar匿名函數foo的屬性...

但是那麼爲什麼的Array一個實例,array,不含這樣的屬性?

+0

您的問題是? – Igor

+0

您希望我們只處理您的代碼 –

+0

@Igor無用的評論。也錯了 – Starkers

回答

2

因爲你正在擴展Array istself而不是數組原型。

這將工作:

$.extend(Array.prototype, ArrayExtension); 

在JavaScript對象是它們的原型後創建。數組實例從數組原型中獲取所有方法。如果你想讓每個數組實例擁有你的foo方法,你將不得不擴展數組原型,而不是數組對象。

Here's a jsfiddle to illustrate this.

+0

我可以有一個jsfiddle嗎? http://jsfiddle.net/hzC78/8/ – Starkers

+0

謝謝,但似乎沒有工作?哈哈http://jsfiddle.net/9kBA3/2/如果你看看控制檯,'未捕獲的TypeError:undefined不是函數' – Starkers

+0

是的,因爲現在原型被擴展了。所以你不能再調用'Array.foo()'。這是一個很大的區別 – idmean