美文网首页JavaScript 进阶营让前端飞
js prototype原型链的利与弊

js prototype原型链的利与弊

作者: AvenKe | 来源:发表于2020-01-20 18:11 被阅读0次

何时使用prototype

已经声明一个方法,你想让所有这个方法的对象实例都能继承这个方法的属性,那你可以使用prototype。例如:

function Person (props){
    this.age = props.age || 0;
    this.name = props.name || 'unnamed';
}

Person.prototype.greeting = function (){
    console.log('Hi, this is ' + this.name);
};

const tommy = new Person({name: 'Tommy', age: 3});
tommy.greeting();

显然,只需要在原型对象prototype 上声明一次,所有实例都可以共享这个属性。

它的缺点是:

当我们查找一个不存在的属性,比如tommy.habit 的时候,浏览器会先按以下顺序查找:

  1. tommy
  2. tommy. proto
  3. tommy.proto.proto
  4. tommy.proto.proto.proto
    经过四次遍历查询还没有找到,则返回null
    显然,这很影响性能。

怎么优化呢?

先判断tommy.hasOwnProperty('habbit'), if true, 继续; else 判断 tommy. proto.hasOwnProperty('habbit'), 如果没有,就不要执行了。

相关文章

  • js prototype原型链的利与弊

    何时使用prototype 已经声明一个方法,你想让所有这个方法的对象实例都能继承这个方法的属性,那你可以使用pr...

  • JavaScript原型链

    js原型链 原型链是JS面向对象的基础非常重要 所有对象只有__proto__属性,而函数具有prototype属...

  • js基础(三)

    js基础 原型链和原型对象 ... ... js没有继承原型对象prototype通常用来添加公共的属性或行为且只...

  • 原型链以及继承

    原型链 原型链类似关系链,几乎所有的js对象都会有通过原型链prototype继承过来的方法或者属性,在java和...

  • js继承

    js继承js 继承-简书 原型链实现集继承 上面的代码实现原型链继承最重要的son.prototype=new f...

  • JS中的继承

    js并不是想java一样面向对象,而是基于对象,所以js是通过prototype的原型链继承 prototype ...

  • js中call、apply和bind到底有什么区别?

    介绍 在js中,每个函数的原型都指向Function.prototype对象(js基于原型链的继承)。因此,每个函...

  • 原型和原型链的简单理解

    原型 在JS中原型就是prototype对象,用来表示类型之间的关系。 原型链 JS中对象和对象之间是有联系的,通...

  • 继承

    原型链直接继承 原型链直接继承prototype 原型链继承_prototype属性 继承_构造函数绑定

  • js基础知识(二)

    一、js原型和原型链 1、原型讲解: 普通的对象:是没有prototype属性的,只有隐藏属性__proto__,...

网友评论

    本文标题:js prototype原型链的利与弊

    本文链接:https://www.haomeiwen.com/subject/vhajzctx.html