>  기사  >  웹 프론트엔드  >  프로토타입과 __proto__의 차이점에 대한 자세한 소개

프로토타입과 __proto__의 차이점에 대한 자세한 소개

高洛峰
高洛峰원래의
2017-01-10 11:11:331306검색

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中文网!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.