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


Posted in Javascript onAugust 31, 2016

当我们用一个构造函数创建对象时,其属性就会被添加到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 将共享属性迁移到原型中去的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
IE8 原生JSON支持
Apr 13 Javascript
js字符串完全替换函数分享
Dec 03 Javascript
javascript中cookie对象用法实例分析
Jan 30 Javascript
使用AngularJS来实现HTML页面嵌套的方法
Jun 17 Javascript
详解JavaScript的变量和数据类型
Nov 27 Javascript
基于jQuery Tipso插件实现消息提示框特效
Mar 16 Javascript
jQuery Mobile框架中的表单组件基础使用教程
May 17 Javascript
JS敏感词过滤代码
Dec 23 Javascript
JavaScript仿聊天室聊天记录
Dec 27 Javascript
Base64(二进制)图片编码解析及在各种浏览器的兼容性处理
Feb 09 Javascript
vue+axios+mock.js环境搭建的方法步骤
Aug 28 Javascript
vue项目接口域名动态获取操作
Aug 13 Javascript
使用vue编写一个点击数字计时小游戏
Aug 31 #Javascript
原生js实现tab选项卡切换
Mar 23 #Javascript
jquery的checkbox,radio,select等方法小结
Aug 30 #Javascript
Javascript日期格式化format函数的使用方法
Aug 30 #Javascript
浅析ES6的八进制与二进制整数字面量
Aug 30 #Javascript
AngularJS轻松实现双击排序的功能
Aug 30 #Javascript
jQuery simpleModal插件的使用介绍
Aug 30 #Javascript
You might like
PHP 强制下载文件代码
2010/10/24 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
php socket通信简单实现
2016/11/18 PHP
javascript 页面只自动刷新一次
2009/07/10 Javascript
学习ExtJS TextField常用方法
2009/10/07 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
javascript实现密码验证
2015/11/10 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
2015/12/03 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
当jquery ajax遇上401请求的解决方法
2016/05/19 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
JavaScript里 ==与===区别详解
2016/08/16 Javascript
基于jQuery ligerUI实现分页样式
2016/09/18 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
Python标准库之sqlite3使用实例
2014/11/25 Python
python类继承与子类实例初始化用法分析
2015/04/17 Python
Python爬虫框架Scrapy实例代码
2018/03/04 Python
Python使用Phantomjs截屏网页的方法
2018/05/17 Python
浅谈Python批处理文件夹中的txt文件
2019/03/11 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
2020/01/13 Python
Python3 实现爬取网站下所有URL方式
2020/01/16 Python
Python实现随机生成任意数量车牌号
2020/01/21 Python
python 日志 logging模块详细解析
2020/03/31 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
2020/05/27 Python
大学生职业生涯规划书模版
2013/12/30 职场文书
老公给老婆的道歉信
2014/01/10 职场文书
幼师自我鉴定
2014/02/01 职场文书
小学敬老月活动方案
2014/02/11 职场文书
年会主持词结束语
2014/03/27 职场文书
2014年幼儿园教研工作总结
2014/12/04 职场文书
2015年管理人员工作总结
2015/05/13 职场文书
新闻通讯稿范文
2015/07/22 职场文书
教你使用Pandas直接核算Excel中快递费用
2021/05/12 Python
Spring Boot两种全局配置和两种注解的操作方法
2021/06/29 Java/Android
AJAX实现省市县三级联动效果
2021/10/16 Javascript