Prototyp与__proto__区别
Jeder Konstruktor ist eine Funktion mit einer Eigenschaft namens „Prototyp“, die zur Implementierung prototypbasierter Vererbung und gemeinsamer Eigenschaften verwendet wird. Jedes von einem Konstruktor erstellte Objekt verfügt über eine implizite Referenz (den sogenannten Prototyp des Objekts) auf den Wert der „Prototyp“-Eigenschaft seines Konstruktors.
Wenn ein Konstruktor ein Objekt erstellt, verweist dieses Objekt implizit auf die Prototypeigenschaft des Konstruktors, um Eigenschaftsverweise aufzulösen. Auf die Prototypeigenschaft des Konstruktors kann durch den Programmausdruck „constructor.prototype“ verwiesen werden, und dem Prototyp eines Objekts hinzugefügte Eigenschaften werden durch Vererbung von allen Objekten gemeinsam genutzt, die den Prototyp gemeinsam nutzen. Alternativ kann mithilfe der integrierten Funktion Object.create ein neues Objekt mit einem explizit angegebenen Prototyp erstellt werden. –ECMAScript® 2015 Sprachspezifikation
__proto__是每个对象都有的一个属性,而prototype是函数才会有的属性!!!
使用Object.getPrototypeOf()代替__proto__!!!
一、prototype
几乎所有的函数(除了一些内建函数)都有一个名为Prototyp(原型)的属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以有特定类型的所有实例共享的属性和方法.prototype是通过调用构造函数而创建的那个对象实例的原型对象.hasOwnProperty()判断指定属性是否为自有属性;in操作符对原型属性和自有属性都返回wahr.
示例:自有属性&原型属性
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
对象Sie können auch Object.getProt verwenden otypeOf() ist eine neue Version von [[Prototype]], die von isPrototypeOf() verwendet wird某个对象是否是另一个对象的原型对象.大部分JavaScript引擎在所有对象上都支持一个名为__proto__的属性,该属性可以直接读写[[Prototyp]]属性.
示例:原型对象
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
更多prototype与__proto__区别详细介绍相关文章请关注注PHP中文网!