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 相关文章推荐
初学prototype,发个JS接受URL参数的代码
Sep 25 Javascript
理解JSON:3分钟课程
Oct 28 Javascript
Javascript中使用parseInt函数需要注意的问题
Apr 02 Javascript
javascript原型继承工作原理和实例详解
Apr 07 Javascript
快速解决jquery.touchSwipe左右滑动和垂直滚动条冲突
Apr 15 Javascript
基于React Native 0.52实现轮播图效果
Aug 25 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
Jul 29 Javascript
NUXT SSR初级入门笔记(小结)
Dec 16 Javascript
Nuxt页面级缓存的实现
Mar 09 Javascript
Vue使用Element实现增删改查+打包的步骤
Nov 25 Vue.js
iview实现动态表单和自定义验证时间段重叠
Jan 10 Javascript
JavaScript 声明私有变量的两种方式
Feb 05 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
PHP如何编写易读的代码
2007/07/10 PHP
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
2008/11/18 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
网站上面有这种切换效果
2006/06/26 Javascript
模仿jQuery each函数的链式调用
2009/07/22 Javascript
js判断一个元素是否为另一个元素的子元素的代码
2012/03/21 Javascript
简体中文转换繁体中文(实现代码)
2013/12/25 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
教你如何使用PHP输出中文JSON字符串
2014/05/22 Javascript
jquery trigger伪造a标签的click事件取代window.open方法
2014/06/23 Javascript
JavaScript中的splice()方法使用详解
2015/06/09 Javascript
JavaScript如何自定义trim方法
2015/07/28 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
JS中dom0级事件和dom2级事件的区别介绍
2016/05/05 Javascript
JavaScript 中 avalon绑定属性总结
2016/10/19 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
2016/12/02 Javascript
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
Python实现压缩与解压gzip大文件的方法
2016/09/18 Python
将tensorflow的ckpt模型存储为npy的实例
2018/07/09 Python
Python按钮的响应事件详解
2019/03/04 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
wxpython自定义下拉列表框过程图解
2020/02/14 Python
Python使用pyexecjs代码案例解析
2020/07/13 Python
python 如何将office文件转换为PDF
2020/09/22 Python
python中实现词云图的示例
2020/12/19 Python
中国电视购物:快乐购
2017/02/04 全球购物
企业文明单位申报材料
2014/05/16 职场文书
电焊工岗位工作职责
2014/07/09 职场文书
云台山导游词
2015/02/03 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
请客吃饭开场白
2015/06/01 职场文书
人民的好儿女观后感
2015/06/18 职场文书
环保证明
2015/06/23 职场文书