我想补充添加一个方法的原型扩展JavaScript对象的能力。
该方法将接收一个或多个其他对象,并且将所有的键/值的增加this
。
这是我想出了:
Object::extend = (objects...) ->
@[key] = value for key, value of object for object in objects
或这个:
Object::extend = (objects...) ->
for object in objects
for key, value of object
@[key] = value
无论按预期方式工作,并编译成相同的javascript代码:
var __slice = [].slice;
Object.prototype.extend = function() {
var key, object, objects, value, _i, _len, _results;
objects = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
_results = [];
for (_i = 0, _len = objects.length; _i < _len; _i++) {
object = objects[_i];
_results.push((function() {
var _results1;
_results1 = [];
for (key in object) {
value = object[key];
_results1.push(this[key] = value);
}
return _results1;
}).call(this));
}
return _results;
};
什么我不太高兴的是,每创建for循环这是我的目的完全是多余的整个结果的事情。
有没有办法让代码更喜欢:
Object.prototype.extend = function() {
var key, object, objects, value, _i, _len;
objects = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
for (_i = 0, _len = objects.length; _i < _len; _i++) {
object = objects[_i];
(function() {
for (key in object) {
value = object[key];
this[key] = value;
}
}).call(this);
}
};
谢谢。
编辑
我知道,我可以简单地嵌入 javascript代码,但是找了CoffeeScript的解决方案。