__proto__(隐式原型)与prototype(显式原型)

近来了解了一下__proto__与prototype:
prototype
1.简朴的说它就是一个属性且属性的值为地点,指向一个对象。
而它平常为函数的属性。
2.它重要用来同享属性和要领(常用于组织函数建立实例对象给实例对象同享属性)
3.重要用来被接见
4.推断自有属性和原型属性 平常用hasOwnProperty()

function Person(name){
    this.name = name;
}
typeof(Person.prototype) //'object'
Person.prototype.publicData = 'test'
Person.privateData = 'test1'
Person.hasOwnProperty("privateData") //true
Person.hasOwnProperty("publicData") //false
var bob = new Person('bob')
var mary = new Person('mary') //bob和mary同享publicData属性

__proto__:
1.基础一切的对象有该属性
2.用来构建原型链接见组织要领中的显现原型

怎样接见?

var arr = new Array()
arr.__proto__ === Array.prototype //true
arr.push(1)
arr.hasOwnProperty("push")//false
'push' in arr//true

以上代码:Array是arr的组织函数,arr的隐式原型指向Array的显现原型,arr中并没有push的要领,却能挪用到push这个要领
这里的push要领挪用的是Array.prototype中的要领
理论上原型链能够无穷长

function Foo(){}
function Bar(){}
Foo.prototype = new Bar()

此时Foo继续了Bar: Foo的实例在接见原型链的时刻先接见Foo的显现原型在接见Bar的显现原型

Foo.prototype = {}

固然我们能够手动修正Foo的继续,以上两种要领重写了Foo.prototype,所以Foo.prototype.constructor也随着改变了。

那Foo.__proto__指向谁呢? 组织函数是Function的实例 所以Foo.__proto__ === Function.prototype

instanceof的推断:

function Foo(){}
Foo instanceof Function
Foo.__proto__.__proto__ ..... === Function.prototype? 

Foo沿着原型链不停的向上查找 离别推断是不是与Function.prototype相称

    原文作者:handsome
    原文地址: https://segmentfault.com/a/1190000014240973
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞