javascript 将共享属性迁移到原型中去的实现方法

 更新时间:2016年08月31日 08:54:40   投稿:jingxian  
下面小编就为大家带来一篇javascript 将共享属性迁移到原型中去的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

当我们用一个构造函数创建对象时,其属性就会被添加到this中去。并且被添加到this中的属性实际上不会随着实体发生改变,这时,我们这种做法显得会很没有效率。例如:

function her(){
  this.name = 'Anna';
}

这意味着每次我们new her()创建一个实例对象的时候都会生成一个全新的name属性,并在内存中拥有属于该属性自己的存储空间。而事实上,我们可以将name属性添加到原型上去,这样一来所有实例都可以共享这个name属性了:

function her(){}
her.prototype.name = 'Anna';

这样一来,我们再用new her()创建对象的时候,name属性就不再是新对象的私有属性了,而是被添加到该对象的原型中去了。虽然这种做法会很有效率,但这也是针对实例对象中的不可变属性而言的,这是一定的不然的话改一下这个属性,所有被创建的新对象的这个属性都会被改变,这可不是我们想要的啊~~~。对象的公有属性尤其适合这种方法。

下面,我们来改进以前的一个例子:

function her(){};
her.prototype.name = 'Anna';
her.prototype.toString = function(){
  return this.name;
}

function his(){};
his.prototype = new her();
his.prototype.constructor = his;
his.prototype.sex = 'women';

如您所见,通常我们在进行原型对象扩展之前,我们现完成了相关继承工作的构建,否则his.prototype中后续新的属性方法有可能会抹掉继承来的东西。

function child(f, m){
  this.eat = f;
  this.don = m;
}
child.prototype = new his();
child.prototype.constructor = child;
child.prototype.name = 'Jok';
child.prototype.fun = function(){
  return this.eat + this.don
}

如您所见,实际上调用toString()这个方法的区别仅仅在于幕后的少量操作。主要区别也就是属性,方法的查找工作将更多地发生在her.prototype中。

以上这篇javascript 将共享属性迁移到原型中去的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • p5.js入门教程之平滑过渡(Easing)

    p5.js入门教程之平滑过渡(Easing)

    本篇文章主要介绍了p5.js入门教程之平滑过渡(Easing),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 移动前端图片压缩上传的实例

    移动前端图片压缩上传的实例

    下面小编就为大家分享一篇移动前端图片压缩上传的实例。具有很好的参考价值,希望对大家有所帮助。一起小编过来看看吧
    2017-12-12
  • Openlayers实现测量功能

    Openlayers实现测量功能

    这篇文章主要为大家详细介绍了Openlayers实现测量功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  •  javascript数组中的slice方法和join​​方法

     javascript数组中的slice方法和join​​方法

    这篇文章主要介绍了 javascript数组中的slice方法和join​​方法,文章内容介绍详细,具有一的参考价值,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-03-03
  • JavaScript 动态添加表格行 使用模板、标记

    JavaScript 动态添加表格行 使用模板、标记

    在客户端使用JavaScript动态添加表格行,先到网上找了相关的资料,发现有现成做好的组件,发现它只能够满足比较简单的要求。
    2009-10-10
  • JavaScript对象的四种创建方法

    JavaScript对象的四种创建方法

    这篇文章主要介绍了JavaScript对象的四种创建方法,首先我们通过确定一个对象的属性和方法展开主题相关内容,需要的小伙伴可以参考一下
    2022-08-08
  • Element-UI的 InfiniteScroll 无限滚动组件基本使用及应用场景

    Element-UI的 InfiniteScroll 无限滚动组件基本使用及应用场景

    这篇文章主要介绍了Element-UI的InfiniteScroll无限滚动组件基本使用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • js 定义对象数组(结合)多维数组方法

    js 定义对象数组(结合)多维数组方法

    下面小编就为大家带来一篇js 定义对象数组(结合)多维数组方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • 善用事件代理,警惕闭包的性能陷阱。

    善用事件代理,警惕闭包的性能陷阱。

    关于JS性能优化中的冰山一角:事件代理、警惕闭包。其实本文有一个文章已经说到,闭包如何产生,闭包的作用;
    2011-01-01
  • JS生态系统加速eslint解析器使用实例探索

    JS生态系统加速eslint解析器使用实例探索

    这篇文章主要为大家介绍了JS生态系统加速之eslint解析器使用实例探索,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01

最新评论