new FunctionName() 운영 메커니즘 간략 - - - 옥버에서

1377 단어 function
테스트 코드:
function Dog(name) {

    this.name = name;

    Dog.prototype = {

        shout: function() { alert("I am " + this.name); }

    };

}

var dog1 = new Dog("Dog 1");

dog1.shout();


위의 코드는 보기에는 매우 아름답지만, 실행하자마자 오류를 보고했습니다. "Object doesn"t support this property or method".코드의 경우:
Fn() {};

var fn = new Fn();


new Fn () 의 실제 구조 프로세스는 다음과 같은 위조 코드와 동등할 수 있습니다.
var o = {__proto__: Fn.prototype};

Fn.apply(o);

return o;


new의 구조 과정을 이해하면 우리는 위의 실례를 분석할 수 있다.
우선, JS 엔진은 함수 성명 function Dog(...)를 만났을 때 함수 대상에 프로토타입 속성을 추가합니다. 위조 코드는 다음과 같습니다.
Dog.prototype = {constructor: Dog};
var dog1 = new Dog("Dog 1〃)로 실행할 때 내부 작업:
var o = {__proto__: Dog.prototype};

Dog.apply(o);

return o;


어쩌면 너는 이미 문제의 소재를 알고 있을지도 모른다.자세한 내용을 보려면 다음과 같이 메모를 추가합니다.
// Dog.prototype = {constructor: Dog};

var o = {__proto__: Dog.prototype};

//  ,o = {__proto__: {constructor: Dog}}

Dog.apply(o);

//  ,Dog.prototype = {shout: function(){...}}

return o;


분명히,dog1을 실행합니다.shout () 때,dog1은 shout 방법이 없습니다.

좋은 웹페이지 즐겨찾기