js中使用使用原型(prototype)定义方法的好处详解


Posted in Javascript onJuly 04, 2016

经常在前端面试或是和其他同行沟通是,在谈到构造在JS定义构造函数的方法是最好使用原型的方式:将方法定义到构造方法的prototype上,这样的好处是,通过该构造函数生成的实例所拥有的方法都是指向一个函数的索引,这样可以节省内存。

当然,这种说法没有任何问题,只是在实现上,并非只有使用prototype的方式才能达到这样的效果,我们可以将方法以函数的形式定义在构造函数之外,然后在构造函数中通过this.method = method的方式,这样生成的实例的方法也都通过索引指向一个函数,具体如下:

// 不使用原型定义方法:
(function() {
  function Constractor() {
    this.method1 = method1;
    this.method2 = method2;
  }

  function method1() {
  }

  function method2() {
  }
})();

一般使用原型定义时代码如下:

(function () {
  function Constractor() {
  }

  Constactor.prototype = {
    method1: function() {
    },
    method2: function() {
    }
  };
  
  // 或者
  Constactor.prototype.method1 = function() {
  };
  Constactor.prototype.method2 = function() {
  };

})();

理论和实现都没有什么高深的,只是为了达到同样的目的,可以通过不同的途径,只是此种方式在使用instanceOf运算符来判断继承关系时就不奏效了。

以上这篇js中使用使用原型(prototype)定义方法的好处详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
List the Stored Procedures in a SQL Server database
Jun 20 Javascript
jQuery生成asp.net服务器控件的代码
Feb 04 Javascript
jquery中的 $("#jb51")与document.getElementById("jb51") 的区别
Jul 26 Javascript
jQuery操作input type=radio的实现代码
Jun 14 Javascript
jQuery CSS()方法改变现有的CSS样式表
Sep 09 Javascript
jquery实现的Banner广告收缩效果代码
Sep 02 Javascript
JavaScript实现搜索框的自动完成功能(一)
Feb 25 Javascript
javascript使用 concat 方法对数组进行合并的方法
Sep 08 Javascript
AngularJS使用angular.bootstrap完成模块手动加载的方法分析
Jan 19 Javascript
Javascript中prototype与__proto__的关系详解
Mar 11 Javascript
vue的传参方式汇总和router使用技巧
May 22 Javascript
JS实现简单日历特效
Jan 03 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
Jul 04 #Javascript
浅谈js构造函数的方法与原型prototype
Jul 04 #Javascript
全面了解js中的script标签
Jul 04 #Javascript
jQuery基础_入门必看知识点
Jul 04 #Javascript
把普通对象转换成json格式的对象的简单实例
Jul 04 #Javascript
JS实现n秒后自动跳转的两种方法
Nov 30 #Javascript
js输出数据精确到小数点后n位代码
Jul 02 #Javascript
You might like
php的curl实现get和post的代码
2008/08/23 PHP
php通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
PHP快速生成各种信息提示框的方法
2016/02/03 PHP
php+resumablejs实现的分块上传 断点续传功能示例
2017/04/18 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
js trim函数 去空格函数与正则集锦
2009/11/20 Javascript
Firefox中autocomplete="off" 设置不起作用Bug的解决方法
2011/03/25 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
2013/12/31 Javascript
解析javascript中鼠标滚轮事件
2015/05/26 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
jQuery+ajax+asp.net获取Json值的方法
2016/06/08 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
老生常谈angularjs中的$state.go
2017/04/24 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
详解VUE2.X过滤器的使用方法
2018/01/11 Javascript
js定义类的方法示例【ES5与ES6】
2019/07/30 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
2019/09/23 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
微信小程序绘制半圆(弧形)进度条
2020/11/18 Javascript
[03:11]完美世界DOTA2联赛PWL DAY8集锦
2020/11/09 DOTA
Python下使用Psyco模块优化运行速度
2015/04/05 Python
详解Python中contextlib上下文管理模块的用法
2016/06/28 Python
Python编码类型转换方法详解
2016/07/01 Python
Python实现AI换脸功能
2020/04/10 Python
Python依赖包迁移到断网环境操作
2020/07/13 Python
浅析Python 条件控制语句
2020/07/15 Python
台湾旅游网站:雄狮旅游网
2017/08/16 全球购物
strlen的几种不同实现方法
2013/05/31 面试题
英文版网络工程师求职信
2013/10/28 职场文书
机电专业毕业生推荐信
2013/11/10 职场文书
施工安全生产承诺书
2014/05/23 职场文书
县级领导干部开展党的群众路线教育实践活动工作汇报
2014/10/25 职场文书
使用pandas生成/读取csv文件的方法实例
2021/07/09 Python