>웹 프론트엔드 >JS 튜토리얼 >foo_javascript 기능의 프로토타입 및 프로토타입 속성에 대한 질문

foo_javascript 기능의 프로토타입 및 프로토타입 속성에 대한 질문

WBOY
WBOY원래의
2016-05-16 18:15:561042검색

혼란은 다음에서 비롯됩니다:

코드 복사 코드는 다음과 같습니다:

function foo {
 this.name = 'foo';
}
alert(foo.prototype === Function.prototype ); 그 당시 나는 왜 foo의 프로토타입이 Function.prototype이 아닌지 이해하지 못했습니다.


다음 예를 보면 o.prototype === Function.prototype이 true여야 한다는 것을 당연하게 여깁니다.
코드 복사 코드는 다음과 같습니다.

function foo() {
 this.name = 'foo'; .prototype.sayHello = function (부모) {
 alert('hello');
foo.sayHello(); //alert 'hello'



After Function.prototype에 sayHello 메서드를 추가하면 foo도 프로토타입에서 sayHello를 가져옵니다. 디버거로 관찰하고 정보(ECMA-262 http://dmitrysoshnikov.com/ecmascript/chapter-5-functions/ 및 "JavaScript the good parts" Chapter 5 5.1 Pseudoclassical 포함)를 확인하고 foo.prototype 정의를 찾았습니다.
this.prototype = {constructor: this}; //여기는 foo.prototype = {constructor: foo}
그런데 다음 테스트를 했습니다
alert(foo = == foo.prototype.constructor); //true

foo.prototype이 정확히 무엇인가요? 이는 new 키워드와 밀접한 관련이 있습니다. new foo()가 무엇을 하는지 이야기해 보세요.
var obj = {}; //새 객체 정의
obj.[[prototype]] == this.prototype;
//참고 1: 여기는 foo, foo.prototype입니다. obj의 프로토타입에 값을 할당합니다. 여기서는 [[prototype]]을 사용하여 프로토타입을 나타냅니다
//참고 2: obj에는 프로토타입 속성이 없으므로 아마도 쓸모가 없습니다
var other = this.apply(obj, 인수); //obj.name = 'foo', 즉 obj는 다음과 같이 실행됩니다. foo function
return (typeof other === 'object' && other) || that ; //foo 함수가 객체를 반환하면 객체를 반환하고, 그렇지 않으면 obj를 반환합니다.

이것은 매우 명확합니다. new foo()는 foo가 객체를 생성하고 생성자 역할을 하며 foo.prototype이 새 객체의 프로토타입으로 사용됩니다.
foo.prototype은 Function.prototype 수정에 대한 걱정 없이 어떤 메소드든 추가하거나 객체로 변경할 수 있습니다(Function.prototype은 모든 함수의 프로토타입입니다). foo.prototype을 수동으로 지정하지 않고 js는 new에 의해 생성된 새 객체에 대한 기본 프로토타입을 지정한다는 것입니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.