捡起JavaScript(3)

原型链

prototype和__proto__之间的关系。学习

function ABC() {}
var abc = new ABC()

咱们知道ABC有个prototype属性,当new出一个新变量abc,其中abc含有__proto__属性,为了区别对待,借鉴你们的广泛认识,其中称prototype为显式原型、__proto__为隐式原型。prototype

有几个概念须要描述一下。rest

  1. 隐式原型的对象数据不单单只和当前变量绑定,会更改类ABC的显式原型的对象数据。
  2. 显式原型的改变会影响隐式原型,一样隐式原型也会显式原型。
  3. 变量abc的隐式原型和ABC的显式原型是等效的。

OK,经过下面代码截图就很能说明问题。


code

方法调用顺序过程

  1. 变量属性方法
  2. __proto__属性方法
  3. 沿着原型链查找对应的方法
  4. 都没找到报错
function ABC () {}
var abc = new ABC()
// 显然具备以下的关系
// abc instanceof ABC instanceof Object

abc.say1 = () => {
    console.log('say1')
}
ABC.prototype.say2 = () => {
    console.log('say2')
}
Object.prototype.say3 = () => {
    console.log('say3')
}

abc.say1() // 调用本身的方法
abc.say2() // 查找本身的__proto__方法,即ABC的prototype原型方法
abc.say3() // 沿着原型链查找到Object的prototype原型方法
abc.say4() // 报错,Uncaught TypeError: abc.say4 is not a function

调用属性名,也是如此。。。对象

心情小记

终于有时间来写写个人JS点滴,工做事太多,最近由于工做缘由还在学习Lua和Nginx,以及春哥的Openresty,哎😔。。。blog

相关文章
相关标签/搜索