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 相关文章推荐
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
Feb 09 Javascript
FLASH 广告之外的链接
Dec 16 Javascript
JS正则表达式获取分组内容的方法详解
Nov 15 Javascript
21个值得收藏的Javascript技巧
Feb 04 Javascript
详解AngularJS 模块化
Jun 14 Javascript
详解webpack+gulp实现自动构建部署
Jun 29 Javascript
使用express+multer实现node中的图片上传功能
Feb 02 Javascript
vue页面切换过渡transition效果
Oct 08 Javascript
Webpack4 使用Babel处理ES6语法的方法示例
Mar 07 Javascript
Vue函数式组件的应用实例详解
Aug 30 Javascript
vue实现表单录入小案例
Sep 27 Javascript
Vue.js暴露方法给WebView的使用操作
Sep 07 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 事务处理数据实现代码
2010/05/13 PHP
PHP STRING 陷阱原理说明
2010/07/24 PHP
ThinkPHP中自定义错误页面和提示页面实例
2014/11/22 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
2015/08/28 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
2017/12/13 PHP
php让json_encode不自动转义斜杠“/”的方法
2020/04/27 PHP
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
JQuery模板插件 jquery.tmpl 动态ajax扩展
2011/11/10 Javascript
javascript管中窥豹 形参与实参浅析
2011/12/17 Javascript
JQuery获取或设置ckeditor的数据(示例代码)
2013/11/15 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
jQuery解决input超多的表单提交
2015/08/10 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
javascript实现tab切换的四种方法
2015/11/05 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
Vue组件之Tooltip的示例代码
2017/10/18 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
前端性能优化建议
2020/09/17 Javascript
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
python中defaultdict的用法详解
2017/06/07 Python
Python日志模块logging基本用法分析
2018/08/23 Python
python 申请内存空间,用于创建多维数组的实例
2019/12/02 Python
使用phonegap进行本地存储的实现方法
2017/03/31 HTML / CSS
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
椰子猫砂:CatSpot
2018/08/27 全球购物
直接有效的自我评价
2014/01/11 职场文书
学习雷锋标语
2014/06/25 职场文书
企业办公室主任岗位职责
2015/04/01 职场文书
地道战观后感400字
2015/06/04 职场文书
《作风建设永远在路上》心得体会
2016/01/21 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
总结Python使用过程中的bug
2021/06/18 Python