我想通過向原型添加方法來添加擴展javascript對象的功能。
該方法將接收一個或多個其他對象,並將所有鍵/值添加到this
。
這是我想出了:使用CoffeeScript擴展Javascript對象
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;
};
我」什麼我不太高興的是整個循環創建的結果,這對我的目的來說完全是多餘的。
有沒有辦法讓更多像代碼:
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);
}
};
感謝。
編輯
我知道,我可以簡單地embed javascript代碼,但是找了CoffeeScript的解決方案。
你有沒有注意到'coffeescript'標籤? javascript代碼是將coffeescript編譯成javascript的結果,我沒有寫這個js代碼。 –
只是注意到並立即刪除了我的評論...哎呀。 – jahroy
Yuck,修改'Object.prototype' –