JS constructor探讨(一):为什么要设置prototype.constructor?
来源:互联网 发布:电商发展数据统计 编辑:程序博客网 时间:2024/05/16 09:23
每次实现JS的继承时,代码里必有如下两句:
// 用于设置原型Employee.prototype = new Person()// 设置原型的构造器Employee.prototype.constructor=Employee
实现原型链就靠第一句话,但第二句话有什么用呢?
先看示例代码:
function Person(username) { this.username = username;}Person.prototype.setUsername = function(name) { this.username = name;}// 继承Personfunction Employee(username, company) { Person.call(this, username); this.company = company;}// 设置原型Employee.prototype = new Person()Employee.prototype.constructor=Employee// 测试代码var yiifaa = new Employee('yiifaa', '360')
1. 会影响原型链吗?
其实可以很容易反证,如果影响原型链的话,constructor应该设置为Person才对,否则不就形成死循环了吗?
// 显然,prototype与constructor已经形成了双向联系// 结果恒为真Employee.prototype.constructor.prototype.constructor === Employee
建立原型链主要靠proto属性,如下:
// 显然,通过__proto__可以链接到原型的顶端// 结果恒为真Employee.prototype.__proto__ === Person.prototypePerson.prototype.__proto__ == Object.prototype
于是
// 一直获取到原型链的顶端Employee.prototype.__proto__.__proto__ === Object.prototype
由上面的代码可以看出,constructor对原型链毫无影响。
2. 会影响instanceof吗?
经过测试,无论有没有设置prototype.constructor,以下恒为真
yiifaa instanceof Employeeyiifaa instanceof Person
所以对instanceof毫无影响,那好问题来了,如何改变instanceof的结果呢?方法如下:
Person.prototype = {}// 现在为falseyiifaa instanceof Person
为什么呢?因为现在原型链的链已经断了,证明如下:
Employee.prototype.__proto__ !== Person.prototype
那怎么改回来呢?
Person.prototype = Employee.prototype.__proto__// 现在测试恒为真yiifaa instanceof Person
3. 会影响ownProperty吗?
显然,ownProperty只取决于构造函数,而不是构造函数的属性。
5. 最佳应用场景
于是constructor的最佳应用场景为类型判断,如下:
var arr = []// 恒为真arr.constructor === Arrayvar num = 2// 恒为真num.constructor === Numbervar str = '123'// 恒为真str.constructor === String
6. 结论
prototype.constructor仅仅可以用于识别对象是由哪个构造函数初始化的,仅此而已。
阅读全文
1 0
- JS constructor探讨(一):为什么要设置prototype.constructor?
- JS constructor探讨(二):再谈构造函数prototype.constructor的用途
- js constructor和prototype
- JS中的constructor与prototype(1)
- js中的prototype与constructor
- js中的prototype和constructor
- JS Prototype constructor 转载之一
- js中的constructor 和prototype
- js 中的this,constructor ,prototype
- js中的constructor和prototype
- js中的constructor与prototype
- js中的prototype和constructor
- prototype constructor
- js类式继承(xxx.prototype.constructor)
- 关于JS中的constructor与prototype
- 关于JS中的constructor与prototype
- 关于JS中的constructor与prototype
- 关于JS中的constructor与prototype .
- 查找一个目录下所有视频文件
- Qt中提示“常量中有换行符“的解决方法
- C++11中std::array的使用
- CentOS 7 为firewalld添加开放端口及相关资料
- 基于mysql 批量插入100w测试数据
- JS constructor探讨(一):为什么要设置prototype.constructor?
- GridView的简单使用
- linux 文本处理命令
- tp5文档自动生类
- UML-类图
- 用node.js爬一下优酷
- 并查集_感染者
- mt6735电池电量计算
- 【python】python的中文编码问题