프로토 타입에 메소드를 추가하여 javascript 객체를 확장하는 기능을 추가하고 싶습니다.
메서드는 하나 이상의 다른 개체를 받고 모든 키/값을 this
에 추가합니다.CoffeeScript로 자바 스크립트 객체 확장하기
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
두 작업이 예상대로, 같은 자바 스크립트 코드로 컴파일 :
이 내가 생각 해낸 것입니다 내가 '무엇
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);
}
};
감사 :
더 같은 코드를 얻을 수있는 방법이 있나요.
편집
나는 단순히 embed 자바 스크립트 코드,하지만 커피 스크립트 솔루션을 찾고 수 있다는 것을 알고 있어요.
'coffeescript' 태그를 보았습니까? javascript 코드는 coffeescript를 javascript로 컴파일 한 결과로 js 코드를 작성하지 않았습니다. –
그냥 그걸 알아 차리고 내 코멘트를 즉시 삭제했습니다 ... 죄송합니다. – jahroy
Yuck,'Object.prototype' 수정하기 –