JavaScript原型链详解


关于JavaScript原型链

原型

  • 每个函数都有一个prototype属性

    • 他默认指向一个object空对象
    • 原型对象中有一个属性constructor,他默认指向函数对象
  • 给函数对象添加属性(一般都是方法)

  • 函数的所有实例对象自动拥有原型中的属性(方法)

    显式原型与隐式原型

  • 每个函数fuction都有一个proyotype 即显式原型

  • 每个实例对象都有一个——proto——称为隐式原型

  • 对象的隐式原型的值为其对应构造函数的显式原型的值

1
2
3
4
5
6
fuction Fn(){
//内部语句:this.prototype={}
}
var fn =new Fn()//内部语句:this.__proto__=Fn.prototype

//fn.__proto__==Fn.prototype

原型链

  • 访问一个对象的属性时

1.先在自身属性中查找,找到返回
2.如果没有,再沿着——proto——这条链向上查找,找到返回
3.如果最终没有找到,返回undefined
此流程为隐式原型链

  • 原型链

  • 函数的显式原型指向的对象默认式空Object实例对象(但object不满足)

  • 所有函数都是Fuction的实例(包含Fuction)

  • Object的原型对象是原型链尽头

  • 读取对象的属性时,会自动到原型链中查找

  • 设置对象的属性值时,不会查找原型链,如果当前对象中没有此属性,直接添加此属性并设置其值

  • 方法一般定义在原型中,属性一般通过构造函数定义在

  • 原型链继承

    原型链测试题

题1

1
2
3
4
5
6
7
8
9
fuction A(){}
A.prototype.n=1
var B=new A()
A.prototype={
n:2;
m:3
}
var c=new A()
console.log(b.n,b.m,c.n,c.m)

题2

1
2
3
4
5
6
7
8
9
10
11
12
fuction F(){}
object.prototype.a=fuction(){
console.log('a()')
}
Fuction.prototype.b=fuction(){
console.log('b()')
}
var f= new F()
f.a()//a()
f.b()//报错
F.a()//a()
F.b()//b()

文章作者: 贾志飞
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 贾志飞 !
评论
  目录