js中的原型链理解

 JavaScript 中,当创建一个函数的时候,这个函数就会自动创建一个 prototype 属性,该属性指向的就是原型对象。

// 构造函数
function Me() {
  this.uName = "shuang";
  this.sayName = function () {
    console.log(this.uName);
  };
}

let m1 = new Me(); // 创建实例
console.log(m1.uName) // shuang;
m1.sayName(); // shuang

Me.prototype.sex = "男";
Me.prototype.saySex = function () {
  console.log(this.sex);
}
console.log(m1.sex); // 男
m1.saySex(); // 男

通过上面的案例可以很清楚的认识到,可以通过 prototype 指向的原型对象中添加新的属性和方法,并且可以通过实例进行访问。

何为原型链?

在JavaScript中万物都是对象,对象和对象之间也有关系,并不是孤立存在的。对象之间的继承关系,在JavaScript中是通过prototype对象指向父类对象,直到指向Object对象为止(person → Person → Object),这样就形成了一个原型指向的链条,专业术语称之为原型链

当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用,如果没有则会去原型对象中寻找,如果找到则直接使用。如果没有则去原型的原型中寻找,直到找到Object对象的原型,Object对象的原型没有原型,如果在Object原型中依然没有找到,则返回undefined。注意:Object对象是老祖宗,没人比他更大了,所以Object的_proto_为空, 即原型链的尽头一般来说都是 Object.prototype

原型链图

 

原型就是 prototype, 是每个函数都具有的属性

原型链就是 __proto__, 是每个对象都具有的属性

 原型链指向

p.__proto__  // Person.prototype
Person.prototype.__proto__  // Object.prototype
p.__proto__.__proto__ //Object.prototype
p.__proto__.constructor.prototype.__proto__ // Object.prototype
Person.prototype.constructor.prototype.__proto__ // Object.prototype
p1.__proto__.constructor // Person
Person.prototype.constructor  // Person
console.log(person.__proto__ === Person.prototype)//true
 
console.log(Person.prototype.constructor===Person)//true
 
console.log(Object.prototype.__proto__ === null) // true
 
//顺便学习一个ES5的方法,可以获得对象的原型
console.log(Object.getPrototypeOf(person) === Person.prototype) // true

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值