이 질문이 의미가되기를 바랍니다. 생성자는 객체를 반환생성자 함수로 만든 객체 자체가 함수가 될 수 있습니까?
function constructor_function() {...code...};
var a = new constructor_function();
a();
이 질문이 의미가되기를 바랍니다. 생성자는 객체를 반환생성자 함수로 만든 객체 자체가 함수가 될 수 있습니까?
function constructor_function() {...code...};
var a = new constructor_function();
a();
경우, new ..
식의 값이 될 것이다 : 나는 지금까지 다음과 같은 일을 할 수 있습니다. 함수는 객체이기 때문에, 당신은 무엇을 하시겠습니까? :
function ConstructorFunction() {
return function() { alert("A function!"); };
}
var a = new ConstructorFunction();
a();
function Wrapper(constr, func) {
return function() {
var f = func();
constr.apply(f, arguments);
return f;
}
}
function ConstructorFunction() {
return function() {
console.log("A function");
}
}
function Constructor() {
this.foo = 42;
}
var MyFunction = Wrapper(Constructor, ConstructorFunction);
var o = MyFunction();
o(); // A function
console.log(o.foo); // 42
가 의도 한대로 this
상태를 조작하고 가지려면 두 객체가 될 반환 된 function
추가 농구의 많은으로하지 않고 할 어렵습니다 점프.
이것은 쉽게 만들 수 있습니다. this
을 개체로 조작하는 표준 생성자 함수가 있습니다. 그런 다음 생성자가 반환 할 함수 인 ConstructorFunction이 있습니다. 이것은 호출 될 때마다 새로운 함수를 반환하는 요소 여야합니다.
두 함수를 결합하면 반환 된 함수와 상태 조작이 모두있는 객체를 반환하는 함수를 얻을 수 있습니다.
당신은 생성자에서 함수를 반환 할 수 있습니다,하지만 정말 생성자 아니다. 당신은 그냥 일반 함수로 기능을 사용할 수 있으며, new
키워드가 필요하지 않습니다 : 함수가 객체
function constructor_function() {
return function() { alert(42); }
};
var a = constructor_function();
a();
, 당신도 여기에 속성을 추가 할 수 있습니다 단지를 반환
function constructor_function() {
var t = function() { alert(42); }
t.size = 1337;
return t;
};
var a = constructor_function();
a();
alert(a.size);
을 새로운 상태로는 아무 것도하지 않습니다. 'new'를 호출하는 것은 의미가 없습니다. 불필요한 비 효율성입니다. – Raynos
흠 감사합니다! 다음 쪽 트리거가 "A String!"대신 "[object Object]"라고 경고하는 이유를 알고 있습니까? code = function test() {return "A string!"}; var a = 새 테스트(); 경보 (a); – zjmiller
@zjmiller 왜냐하면'new' 키워드로 객체를 반환해야하기 때문입니다. 객체를 반환하지 않으면 반환 값은'this' 객체이며'test' 함수에서 사용됩니다. 'this'의 기본 반환 값을 덮어 쓰려면 객체를 반환해야합니다 (함수는 객체이고, 문자열은 문자열입니다) – Raynos