使用实例函数扩展类

时间:2014-07-24 14:58:35

标签: jquery class

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现在包含运行匿名函数的foo属性,该函数返回bar ...

但为什么Arrayarray的实例不包含此类属性呢?

1 个答案:

答案 0 :(得分:2)

因为您正在扩展Array而不是数组原型。

这将有效:

$.extend(Array.prototype, ArrayExtension);

在JavaScript中,对象是在原型之后创建的。数组实例从数组原型中获取所有方法。如果你希望每个数组实例都有你的foo方法,你将不得不扩展数组原型,而不是数组对象。

Here's a jsfiddle to illustrate this.