prototype与__proto__区别
각 생성자는 프로토타입 기반 상속 및 공유 속성을 구현하는 데 사용되는 "prototype"이라는 속성을 갖는 함수입니다. 생성자에 의해 생성된 모든 객체에는 해당 생성자의 "프로토타입" 속성 값에 대한 암시적 참조(객체의 프로토타입이라고 함)가 있습니다.
생성자가 객체를 생성할 때 해당 객체는 속성 참조를 확인하기 위해 생성자의 프로토타입 속성을 암시적으로 참조합니다. 생성자의 프로토타입 속성은 프로그램 표현식 constructor.prototype에 의해 참조될 수 있으며 객체의 프로토타입에 추가된 속성은 상속을 통해 프로토타입을 공유하는 모든 객체에서 공유됩니다. 또는 Object.create 내장 함수를 사용하여 명시적으로 지정된 프로토타입으로 새 객체를 생성할 수도 있습니다. –ECMAScript® 2015 언어 사양
__proto__是每个对象이 있는 모든 것이 있습니다.
使useObject.getPrototypeOf()代替__proto__!!!
一、prototype
几乎所有的函数(除了一些内建函数) 뚜유일个프로토타입의 이름을 정하세요.享적의 성능과 방법.프로토타입은 일반적으로 사용되는 造函数而创建的那个对象实例的原型对象。hasOwnProperty()判断指定属性是否为自有属性;in操作符对原型属性과自有属性書返回true.
示例:自유기성&원산성
var obj = {a: 1}; obj.hasOwnProperty("a"); // true obj.hasOwnProperty("toString"); // false "a" in obj; // true "toString" in obj; // true
示例:鉴别原型属性
function hasPrototypeProperty(obj, name){ return name in obj && !obj.hasOwnProperty(name); }
이、__proto__
对象具有属性__proto__,可称为隐式原型, 一个对象的隐式原型指向构造该对象的构造函数造型, 这也保证实例能够访问에서 构造函数数数型中型义의 성능과 방법을 결정하십시오 。
function Foo(){} var Boo = {name: "Boo"}; Foo.prototype = Boo; var f = new Foo(); console.log(f.__proto__ === Foo.prototype); // true console.log(f.__proto__ === Boo); // true Object.getPrototypeOf(f) === f.__proto__; // true
셋、Object.getPrototypeOf()
一个对象实例过内부属[[프로토타입]]跟踪其原型对象.getPrototypeOf()방법은 [[프로토타입]]属에 사용됩니다. 섹시한 방법은 isPrototypeOf() 방법입니다.某个对象是否是另一个对象 의 원본이 입니다. [프로토타입]]属性。
示例:原型对象
function Person(name) { this.name = name; } Person.prototype = { constructor: Person, sayName: function(){ console.log("my name is " + this.name); } } var p1 = new Person("ligang"); var p2 = new Person("Camile"); p1.sayName(); // my name is ligang p2.sayName(); // my name is Camile
Object.prototype.proto는 오늘날 대부분의 브라우저에서 지원되지만 그 존재와 정확한 동작은 다음과 같이 ECMAScript 6 사양에서만 표준화되었습니다. 웹 브라우저에 대한 호환성을 보장하는 레거시 기능입니다. 더 나은 지원을 위해 대신 Object.getPrototypeOf()만 사용하는 것이 좋습니다. –MDN
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
更多prototype与__proto__区别详细介绍关文章请关注PHP中文网!