如何向[]添加方法
How to add a method to []?
首先,我不清楚这个对象的类型是什么(也许是NativeArray?)。对我来说,ember通过将NativeArray mixin应用于array.prototype来覆盖带有一些mixin的默认javascript数组
也就是说,在我的代码中,我想通过允许来进行这种覆盖
["a", "b", "a"].count("a") // returns 2
我试图重新打开Enumerable Mixin(对我来说,这是实现这种功能的正确位置)
我确信重新打开的代码是在使用count()方法之前执行的。但我遇到了这个错误:
Object has no method count().
阅读代码时,我似乎不得不将mixin重新应用到Array.prototype,但不幸的是,执行Ember.Enumerable.apply(Array.prototype)
没有任何作用。
更新:在阅读了一些文章之后,我开始理解原型。我可以用向数组添加函数
Array.prototype.newFunc = function () {
console.log('bla');
}
但在我的情况下,这并不能满足我的要求,例如,MutableArray将能够调用newFun()
也许做我想做的事情的唯一方法是对ember进行PR,将我的计数方法包括在Enumerable Mixin中。。。。
欢迎任何其他建议:)
您正在寻找reopen
,它允许您修改现有的类。这里有一个例子:
Ember.Enumerable.reopen({
newFunc: function() {
console.log('blah');
}
});
警告:调用reopen
不会对已实例化的对象产生影响。它只会影响在调用重新打开后创建的对象。简而言之,请确保先进行reopen
调用。
http://jsfiddle.net/kcjzw/249/
App = Ember.Application.create();
var NativeArray = Ember.Mixin.create(Ember.NativeArray, {
count: function(ele) {
var noOfEle = 20;
//add your logic to count
return noOfEle;
}
});
NativeArray.apply(Array.prototype);
console.log(["a", "b", "a"].count("a")); //20
REF:Emberjs中的Native Array不支持深度复制?
这不是100%,所以读起来有点怀疑。看起来mixin在更新和创建时有两条主要路径。一个是"重新打开"方法,这最终会向对象添加另一个mixin。第二个是"应用",它实际上将这些mixin向下合并到对象本身中,并且丢失了mixin引用。所以,更新Ember。除非您在定义的新类中使用它,否则枚举几乎不会给您带来任何好处。
你总是可以在所有枚举类型上激发"应用"方法,但这有点痛苦。。。也许有些检测黑客搜索并返回了所有主要类。。。嗯。
另一个解决方案是分叉回购并添加方法(可能会为您节省巨大的头痛和时间……您确实说过这一点)。我想在9.8中,你曾经可以做这种事情,但这些后来的构建恰恰给这带来了问题。
编辑:为了澄清,我所说的"合并"实际上是指将实际方法复制到另一个对象上。比如对(Array.prototype)……所以"检测"会找到Ember。可枚举,但Mixin不再真正被Array引用(方法在前面被复制)。
我想你可以创建一个新的mixin,并根据需要将其应用于类型(你只需要记住你是明确地这样做的)。现在,如果你只需要在Array上使用它,你只需将其应用于Array.prototype。下次你需要它时,比如说ArrayController,你可以添加它。
做了一个简单的小提琴手,但它和其他人的帖子几乎一样。我仍然不喜欢这样做,就像回购一样。
- 在对象中添加方法时出现问题
- 什么意思是“;向原型添加方法”;
- jQuery验证器添加方法未定义
- 向通过ReST JSON调用生成的Angular Javascript对象添加方法
- 向React中的高阶组件添加方法
- 向JavaScript对象添加方法
- 如何向[]添加方法
- 如何在流星js中为对象添加方法
- jQuery.validation 在生日年龄验证中添加方法错误
- 使用 IE8 添加方法的 JavaScript 错误
- 向方法添加方法
- 如何在 Javascript ES6 中向类添加方法
- Javascript:向对象类添加方法的优缺点是什么
- 如何更改“动物”的原型并添加方法“sayName”来打印语句
- 如何在 Illustrator CS5.1+ 中创建画板对象的添加方法所需的矩形对象
- 如何在 nodejs 中全局添加方法到 JSON、Date 或其他“本机”对象
- 什么类/类型是未定义的,是否可以向其扩展/添加方法
- 为什么在 javascript 中向数组原型添加方法会破坏 for 循环上的迭代
- 向对象添加方法
- 动态添加方法到对象