javascript中的constructor
constructor,构造函数,对这个名字,我们都不陌生,constructor始终指向创建当前对象的构造函数。
这里有一点需要注意的是,每个函数都有一个prototype属性,这个prototype的constructor指向这个函数,这个时候我们修改这个函数的prototype时,就发生了意外。如
function Person(name,age){this.name = name;this.age = age; }Person.prototype.getAge = function(){return this.age; } Person.prototype.getName = function(){return this.name; }var p = new Person("Nicholas",18); console.log(p.constructor); //Person(name, age) console.log(p.getAge()); //18 console.log(p.getName()); //Nicholas
但是如果是这样:
function Person(name,age){this.name = name;this.age = age; }Person.prototype = {getName:function(){return this.name;},getAge:function(){return this.age;} }var p = new Person("Nicholas",18); console.log(p.constructor); //Object() console.log(p.getAge()); //18 console.log(p.getName()); //Nicholas
结果constructor变了。
原因就是prototype本身也是对象,上面的代码等价于
Person.prototype = new Object({getName:function(){return this.name;},getAge:function(){return this.age;} });
因为constructor始终指向创建当前对象的构造函数,那么就不难理解上面代码p.constructor输出的是Object了。
对于修改了prototype之后的constructor还想让它指向Person怎么办呢?简单,直接给Person.prototype.constructor赋值就可以了:
Person.prototype = {constructor:Person,getName:function(){return this.name;},getAge:function(){return this.age;} }
转载于:https://www.cnblogs.com/yansj1997/p/5408385.html
javascript中的constructor相关推荐
- JavaScript中的constructor属性
对象的属性: JavaScript String对象 1.constructor 2.length 3.目前了解就先不涉及了 length属性很好理解就是字符串的长度,但是constructor就难以 ...
- 谈谈JavaScript中的function constructor和new关键字
您是否曾困惑于 Javascript 中的new关键字呢?是否曾想理解关于 function 和 constructor 的区别是什么呢? 大多数 Javascript 的新开发者不太想要使用new关 ...
- Javascript中this、prototype、constructor的理解
http://blog.163.com/wish4sun@126/blog/static/1438006652011312119516/ 在Javascript面向对象的编程中我们常常会见到这三个关键 ...
- java中typeof_深入剖析JavaScript中的数据类型判断(typeof instanceof prototype.constructor)...
关于JavaScript中的类型判断,我想大部分JavaScripter 都很清楚 typeof 和 instanceof,却很少有人知道 constructor,以及constructor与前面二 ...
- JavaScript中__proto__、prototype和constructor的详细讲解【1】
作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞 ...
- 在Javascript中使用面向对象的编程
by Mike Koss March 26th, 2003 这是一篇,我个人认为最好的,Javascript面向对象编程的文章.翻译不好的地方,还望大家指正,谢谢. 如果您需要,可以访问下面的地址取得 ...
- 在javascript中判断类型
String 一个字符串始终是一个字符串,所以这一块是很容易.除非使用new(new String)调用,否则typeof将返回"object".所以也要包含那些可以使用的字符串i ...
- JavaScript中几个重要的知识点(1) ---- 面向对象
JavaScript中几个最重要的大知识点 面向对象 DOM事件 异步交互ajax 面向对象 在JS中可以把任意的引用和变量都看成是一个对象.面向对象的主要三个表现形式: 封装 继承 多态 1. 封装 ...
- 如何在JavaScript中实现链接列表
If you are learning data structures, a linked list is one data structure you should know. If you do ...
最新文章
- SSH与VMware的Linux虚拟机链接
- 堆(heap)与栈(stack)的区别(一)
- Android 开源之StickyHeaderListView 标题渐变、吸附悬停、筛选分类、动态头部
- 灰鸽子木马的原理和清除方法
- [资料]Keychain 获取设备唯一
- 【数据竞赛】消费金融场景下的用户购买预测冠军方案分享
- C专家编程-Chapter6 运行时数据结构(转)
- Blazor+Dapr+K8s微服务之开发环境调试
- js29--装饰着模式
- Struts2学习笔记 - Action篇定义逻辑Action
- vue: 从组件通讯到vuex (上)
- 智能优化算法改进算法 -附代码
- python进阶到高阶大全(强烈推荐)
- 储存卡怎么格式化为fat32_64g储存卡怎么格式化成fat32格式化
- PHP实现牛津英汉词典
- FusionAccess桌面云模板制作
- .Net -- EF Core详解
- 单例模式的5种实现方式
- app商城开发要多少钱_价格透明_讲讲行业收费套路_OctShop
- “历史的教训”之软件测试