나는 Crockford가 JavaScript에서 상속을위한 유명한 객체 함수를 가지고 있다는 것을 알고 있습니다.
function object(o) {
function F() {}
F.prototype = o;
return new F();
}
그러나 나는 혼란 스럽습니다. 줄 뒤에 F.prototype = o
왜 그가 F.prototype
다음과 같이의 생성자 를 재설정하지 않습니까?
F.prototype.constructor = F
그것은 일반적인 관행이 아닙니까?
그것은 일반적인 관행이 아닙니까?
서브 클래스 (다른 프로토 타입에서 상속 된 프로토 타입이있는 생성자 함수)를 생성 할 때만 가능합니다.
그러나 그것은이 코드의 목적이 아닙니다 Object.create
. 그것은 다른 객체로부터 상속받는 객체를 만드는 부분을 차지합니다. F
생성자 함수는 중간이 아닌 노출 될 예정이다.
F.prototype = o;
왜 그가하지 않는
F.prototype.constructor = F
거야?
o
그 자체 가 바뀔 것이기 때문입니다 . 목표는 새 개체를 만드는 것입니다. 생성자 자체가 아니라 중간 생성자 의 인스턴스 를 반환 합니다.
어디에서 constructor
설정 됩니까 ( 필요한 경우 )? 에 의해 인스턴스화되는 새 개체에서 object
:
function inherit(chd, par) {
chd.prototype = object(par.prototype);
chd.prototype.constructor = chd;
}
function Foo() {}
function Bar() {}
inherit(Foo, Bar);
/* Because of overwriting `constructor`: */
Foo.prototype.constructor === Foo
(new Foo).constructor === Foo
/* Because of the prototype chain: */
new Foo instanceof Bar // true, because
Foo.prototype instanceof Bar // true
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다