JavaScript中的prototype和constructor简明总结


Posted in Javascript onApril 05, 2014

一、constructor
constructor的值是一个函数。在JavaScript中,除了null和undefined外的类型的值、数组、函数以及对象,都有一个constructor属性,constructor属性的值是这个值、数组、函数或者对象的构造函数。如:

var a = 12, // 数字
    b = 'str', // 字符串
    c = false, // 布尔值
    d = [1, 'd', function() { return 5; }], // 数组
    e = { name: 'e' }, // 对象
    f = function() { return 'function'; }; // 函数console.log('a: ', a.constructor); // Number()
console.log('b: ', b.constructor); // String()
console.log('c: ', c.constructor); // Boolean()
console.log('d: ', d.constructor); // Array()
console.log('e: ', e.constructor); // Object()
console.log('f: ', f.constructor); // Function()

以上的构造函数都是JavaScript内置的,我们也可以自定义构造函数,如:

function A(name) {
    this.name = name;
}var a = new A('a');
console.log(a.constructor); // A(name)

调用构造函数时,需要用new关键字,构造函数返回的是一个对象,看下面的代码就知道了:

var a = 4;
var b = new Number(4);console.log('a: ', typeof a); // a: number
console.log('b: ', typeof b); // b: object

二、 prototype
prototype是函数的一个属性,默认情况下,一个函数的prototype属性的值是一个与函数同名的空对象,匿名函数的prototype属性名为Object。如:

function fn() {}console.log(fn.prototype); // fn { }

prototype属性主要用来实现JavaScript中的继承,如:

function A(name) {
    this.name = name;
}A.prototype.show = function() {
    console.log(this.name);
};
function B(name) {
    this.name = name;
}
B.prototype = A.prototype;
var test = new B('test');
test.show(); // test

这儿有一个问题,test的构造函数其实是A函数而不是B函数:

console.log(test.constructor); // A(name)

这是因为B.prototype = A.prototype把B.prototype的构造函数改成了A,所以需要还原B.prototype的构造函数:

function A(name) {
    this.name = name;
}A.prototype.show = function() {
    console.log(this.name);
};
function B(name) {
    this.name = name;
}
B.prototype = A.prototype;
B.prototype.constructor = B;
var test = new B('test');
test.show(); // test
console.log(test.constructor); // B(name)

之所以要这么做,是因为prototype的值是一个对象,且它的构造函数也就是它的constructor属性的值就是它所在的函数,即:

console.log(A.prototype.constructor === A); // true

Javascript 相关文章推荐
让getElementsByName适应IE和firefox的方法
Sep 24 Javascript
学习ExtJS form布局
Oct 08 Javascript
让IE6支持min-width和max-width的方法
Jun 25 Javascript
使用POST方式弹出窗口的两种方法示例介绍
Jan 29 Javascript
setinterval()与clearInterval()JS函数的调用方法
Jan 21 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
May 09 Javascript
浅谈javascript事件取消和阻止冒泡
May 26 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
Sep 04 Javascript
node.js发送邮件email的方法详解
Jan 06 Javascript
Angular2实现自定义双向绑定属性
Mar 22 Javascript
React Form组件的实现封装杂谈
May 07 Javascript
node爬取新型冠状病毒的疫情实时动态
Feb 06 Javascript
JavaScript中的typeof操作符用法实例
Apr 05 #Javascript
Javascript排序算法之计数排序的实例
Apr 05 #Javascript
JavaScript中的正则表达式简明总结
Apr 04 #Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
Apr 04 #Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
Apr 04 #Javascript
JQuery记住用户名和密码的具体实现
Apr 04 #Javascript
JS根据变量保存方法名并执行方法示例
Apr 04 #Javascript
You might like
千呼万唤始出来,DOTA2勇士令状不朽宝藏Ⅱ现已推出
2020/08/25 DOTA
php实现的一个很好用HTML解析器类可用于采集数据
2013/09/23 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
用javascript添加控件自定义属性解析
2013/11/25 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
浅谈Javascript中的函数、this以及原型
2016/10/09 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
2016/11/16 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
2017/01/13 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
angular.js实现购物车功能
2017/10/23 Javascript
vue-awesome-swiper滑块插件使用方法详解
2017/11/27 Javascript
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
浅谈Vue数据响应
2018/11/05 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
2019/05/16 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
关于angular浏览器兼容性问题的解决方案
2020/07/26 Javascript
JavaScript数组常用的增删改查与其他属性详解
2020/10/13 Javascript
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
Python实现深度遍历和广度遍历的方法
2019/01/22 Python
pip安装python库的方法总结
2019/08/02 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
使用SQLAlchemy操作数据库表过程解析
2020/06/10 Python
Python语言编写智力问答小游戏功能
2020/10/13 Python
彻底解决pip下载pytorch慢的问题方法
2021/03/01 Python
HTML5 input新增type属性color颜色拾取器的实例代码
2018/08/27 HTML / CSS
Dyson加拿大官方网站:购买戴森吸尘器,风扇,冷热器及配件
2016/10/26 全球购物
写好自荐信的技巧
2013/11/08 职场文书
母亲追悼会答谢词
2014/01/27 职场文书
主办会计岗位职责
2014/03/13 职场文书
家长对老师的评语
2014/04/18 职场文书
国庆宣传标语
2014/06/30 职场文书
试用期自我评价范文
2015/03/10 职场文书