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

作者:jingxian 时间:2024-04-22 13:05:00 

当我们用一个构造函数创建对象时,其属性就会被添加到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,原型
0
投稿

猜你喜欢

  • 给自定义对象加上自定义事件的支持的教程

    2023-10-14 20:49:00
  • Python进度条tqdm的用法详解

    2022-09-03 00:27:35
  • python 日志增量抓取实现方法

    2022-01-08 15:43:07
  • python实现密码验证合格程序的思路详解

    2022-12-10 05:07:38
  • python读取配置文件方式(ini、yaml、xml)

    2022-10-12 05:07:29
  • Golang限流库与漏桶和令牌桶的使用介绍

    2024-05-10 13:57:50
  • SQL Server数据在不同数据库中的应用

    2008-12-24 15:34:00
  • pycharm 2020 1.1的安装流程

    2022-01-01 22:21:41
  • sql不常用函数总结以及事务,增加,删除触发器

    2012-07-11 16:03:42
  • 云服务器centos8安装oracle19c的详细教程

    2024-01-23 06:36:23
  • antd项目实现彩蛋效果的详细代码

    2023-09-14 12:51:20
  • 用户体验量化方法研究(二)

    2010-02-08 12:46:00
  • 使用python爬取抖音视频列表信息

    2023-04-06 12:51:48
  • python实现简单飞行棋

    2021-07-24 23:02:14
  • 很有意思的SQL多行数据拼接

    2024-01-28 02:08:56
  • python 上下文管理器及自定义原理解析

    2023-01-24 20:07:55
  • Oracle 查询表信息获取表字段及字段注释

    2024-01-14 14:46:36
  • 如何利用Golang解析读取Mysql备份文件

    2024-01-28 20:51:19
  • 在django中,关于session的通用设置方法

    2023-09-26 09:53:52
  • Python中最好用的json库orjson用法详解

    2023-06-13 23:11:49
  • asp之家 网络编程 m.aspxhome.com