이것은 나쁜 생각입니다 (IMO, 절름발이 구문 당에 많은 오버 헤드가 있습니다).하지만 그렇게 할 수 있습니다. 이제
function InvokableObject(properties) {
var propName,
invoke = properties.invoke,
fn = typeof invoke === 'string' ?
function() {
return fn[invoke].call(fn, arguments);
} :
function() {
return invoke.call(fn, arguments);
};
delete properties.invoke;
for (propName in properties) {
if (properties.hasOwnProperty(propName)) {
fn[propName] = properties[propName];
}
}
return fn;
}
, 당신은 "호출"속성으로 함수를 지정할 수 있으며 개체를 호출 할 때, 그것은 실행됩니다 :
var incrementable = InvokableObject({
value: 0,
invoke: function() {
this.value += 1;
return this.value;
}
});
console.log(incrementable.value); //0
console.log(incrementable()); //1
console.log(incrementable()); //2
다른 방법으로, 당신은 invokation 함수의 이름을 지정할 수 있습니다 :
var incrementable = InvokableObject({
value: 0,
invoke: 'increment',
increment: function() {
this.value += 1;
return this.value;
}
});
console.log(incrementable.value); //0
console.log(incrementable()); //1
console.log(incrementable()); //2
진지하게,하지 마세요. 그냥 obj.increment 나 뭐든지 불러주세요.
나는 비슷한 질문을 너무 오래 전에하지 않았다. 여기를 보아라. http://stackoverflow.com/questions/13227623/custom-function-class – SpaceFace
... "증분 함수로"... ... ** 무엇? ** – Pointy
블래스트 된 코멘트 타이머. 당신의 아이디어는 내 것보다 간단 해 보입니다. 어떤 캐시 된 속성이있는 함수를 사용할 수없는 이유가 있습니까? 함수에 접근해야한다면'arguments.callee'를 사용하여 함수를 참조 할 수 있습니다. 나는 당신이'this'가 여전히'window'를 참조하는 함수처럼 행동 할지라도'this'가 작동하기를 원한다고 가정합니다. 당신이하려는 일에 대해 더 많은 정보를 주시겠습니까? 이렇게? http://jsfiddle.net/YhxDD/ – SpaceFace