내가 사용 반디의 defineGetter 제안에 정착하지만,의 속성을 통해 반복 접근 방식을 원래의 객체. 여기
getAttr = function(att) {
return function() { return eval("originalObject."+att) };
}
//Delegate all attribute access to original object
for (var att in originalObject) {
overRiddenObject.__defineGetter__(att.toString(), getAttr(att));
}
그리고
내가 jQuery를 선택기를 프로필에 내 코드에 충실 할 수있는 전체 조각입니다 :
var original$ = $;
$ = function() {
//Ignore document.ready function calls
if (typeof(arguments)[0] === 'function') {
return original$.apply(this, arguments);
}
t1 = new Date().getTime();
// Run each selector 100 times since we can only time it to the millisecond
for (var i=0; i<100; i++)
x = original$.apply(this, arguments);
t = new Date().getTime()-t1;
// Print selector name, time taken and number of elements matched
console.log(arguments," "+t+"ms"+" ("+x.length+" element(s))");
return x;
};
getAttr = function(att) {
return function() { return eval("original$."+att) };
}
//Delegate all attribute access to original object
for (var att in original$) {
$.__defineGetter__(att.toString(), getAttr(att));
}
그것은 아마 폐쇄의를 사용하여 더 나은 스타일로 할 수 있지만, 그것을 작동합니다.
또한 (function($) {...))(jQUery)
에서 "$"을 제거하면 jQuery 플러그인에서만 작동합니다.
이것은 이것을 다시 작성하여 .extend를 사용하고 선택 중에 호출되는 메소드를 덮어 쓰면 해결할 수 있습니다.이 플러그인을 만들기 위해 제가 조사하고 있습니다.
음,별로 이름으로 속성을 연결 만 할 수 있습니다. 모든 개체를 원래 개체에 위임해야합니다. – bcoughlan