prototype 변천
3840 단어 prototype
setp1
var Person = function () {}; //
var p = new Person();
setp1 변천:
var Person = function () {};
var p = new Person();
/*
==> p.__proto__ = Person.prototype ==> Person.call(p);
*/
setp1 변천 증명
var Person = function () {};
var p = new Person();
alert(p.__proto__=== Person.prototype) //true
__proto__
은 내부 원형, prototype
은 구조기 원형(구조기는 사실 함수)__proto__
는 Function.prototype
를 가리키며 빈 함수(Empty function)Function.prototype.__proto__ === Object.prototype
과 동시Object.prototype.__proto__ === null
setp2
var Person = function () {}; //
Person.prototype.Say = function () { //
alert("Person say")
}
var p = new Person();
p.Say();
setp2 변천:
var Person = function () {}; //
Person.prototype.Say = function () { //
alert("Person say")
}
var p = new Person();
/*
==> p.__proto__ = Person.prototype ==> Person.call(p);
*/
p.Say();
/*
==> p.Say() ( !) ==> p.__proto__.Say() ( )
*/
setp2 변천 증명:
var Person = function () {};
var p = new Person();
alert(p.Say=== Person.prototype.Say) //true
step3
var Person = function () {}; //
Person.prototype.Say = function () { //
alert("Person say");
}
Person.prototype.Salary = 50000; //
var Programmer = function () { }; //
Programmer.prototype = new Person();
Programmer.prototype.WriteCode = function () { //
alert("programmer writes code");
};
Programmer.prototype.Salary = 500; //
var p = new Programmer();
p.Say();
p.WriteCode();
alert(p.Salary);
step3 변천:
var Person = function () {}; //
Person.prototype.Say = function () { //
alert("Person say");
}
Person.prototype.Salary = 50000; //
var Programmer = function () { }; //
Programmer.prototype = new Person();
/*
==》 Programmer.prototype = p1 ( var p1 = new Person() )
// : p1.__proto__ == Person.prototype
==> Programmer.prototype.__proto__ == p1.__proto__ == Person.prototype
==》 Programmer.prototype.__proto__ = Person.prototype;
*/
Programmer.prototype.WriteCode = function () { //
alert("programmer writes code");
};
Programmer.prototype.Salary = 500; //
var p = new Programmer();
/*
==》p.__proto__ = Programmer.prototype ;
==》 p.__proto__.__proto__ = Person.prototype
*/
p.Say();
/*
==> p.Say() ( Say)
==> p.__proto__.Say()( Say)
// p.__proto__ == Programmer.prototype ( Say)
==> p.__proto__.__proto__.Say() ( !)
// p.__proto__.__proto__ = Person.prototype( Say)
*/
p.WriteCode();
/*
==> p.WriteCode() ( WriteCode)
==> p.__proto__.WriteCode ( !) // p.__proto__ == Programmer.prototype( WriteCode)
*/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기능 재검토(프로토타입 아님) 🤥빠른 수정을 위한 몇 가지 참고 사항 사용자 지정 속성이 있는 함수 이것은 대부분의 경우 런타임 바인딩이므로 someKey는 aFunction 또는 aFunction.prototype의 속성이 아닙니다. 접두사 cu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.