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相关推荐

  1. JavaScript中的constructor属性

    对象的属性: JavaScript String对象 1.constructor 2.length 3.目前了解就先不涉及了 length属性很好理解就是字符串的长度,但是constructor就难以 ...

  2. 谈谈JavaScript中的function constructor和new关键字

    您是否曾困惑于 Javascript 中的new关键字呢?是否曾想理解关于 function 和 constructor 的区别是什么呢? 大多数 Javascript 的新开发者不太想要使用new关 ...

  3. Javascript中this、prototype、constructor的理解

    http://blog.163.com/wish4sun@126/blog/static/1438006652011312119516/ 在Javascript面向对象的编程中我们常常会见到这三个关键 ...

  4. java中typeof_深入剖析JavaScript中的数据类型判断(typeof instanceof prototype.constructor)...

    关于JavaScript中的类型判断,我想大部分JavaScripter 都很清楚 typeof 和  instanceof,却很少有人知道 constructor,以及constructor与前面二 ...

  5. JavaScript中__proto__、prototype和constructor的详细讲解【1】

    作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞 ...

  6. 在Javascript中使用面向对象的编程

    by Mike Koss March 26th, 2003 这是一篇,我个人认为最好的,Javascript面向对象编程的文章.翻译不好的地方,还望大家指正,谢谢. 如果您需要,可以访问下面的地址取得 ...

  7. 在javascript中判断类型

    String 一个字符串始终是一个字符串,所以这一块是很容易.除非使用new(new String)调用,否则typeof将返回"object".所以也要包含那些可以使用的字符串i ...

  8. JavaScript中几个重要的知识点(1) ---- 面向对象

    JavaScript中几个最重要的大知识点 面向对象 DOM事件 异步交互ajax 面向对象 在JS中可以把任意的引用和变量都看成是一个对象.面向对象的主要三个表现形式: 封装 继承 多态 1. 封装 ...

  9. 如何在JavaScript中实现链接列表

    If you are learning data structures, a linked list is one data structure you should know. If you do ...

最新文章

  1. SSH与VMware的Linux虚拟机链接
  2. 堆(heap)与栈(stack)的区别(一)
  3. Android 开源之StickyHeaderListView 标题渐变、吸附悬停、筛选分类、动态头部
  4. 灰鸽子木马的原理和清除方法
  5. [资料]Keychain 获取设备唯一
  6. 【数据竞赛】消费金融场景下的用户购买预测冠军方案分享
  7. C专家编程-Chapter6 运行时数据结构(转)
  8. Blazor+Dapr+K8s微服务之开发环境调试
  9. js29--装饰着模式
  10. Struts2学习笔记 - Action篇定义逻辑Action
  11. vue: 从组件通讯到vuex (上)
  12. 智能优化算法改进算法 -附代码
  13. python进阶到高阶大全(强烈推荐)
  14. 储存卡怎么格式化为fat32_64g储存卡怎么格式化成fat32格式化
  15. PHP实现牛津英汉词典
  16. FusionAccess桌面云模板制作
  17. .Net -- EF Core详解
  18. 单例模式的5种实现方式
  19. app商城开发要多少钱_价格透明_讲讲行业收费套路_OctShop
  20. “历史的教训”之软件测试

热门文章

  1. Silverlight实例教程 - Navigation导航框架系列汇总
  2. C++网络编程(一)
  3. java修改cookie的值_Java 对 Cookie增删改查的实现示例
  4. VS如何新建一个基于对话框的MFC工程并添加按钮
  5. Word中项目符号和编号用法详解
  6. 系统无法正确检测到盘符
  7. 在VMware Workstation中安装Ubuntu设置网络连接
  8. easybcd安装Ubuntu
  9. VMware克隆出来的网卡错误
  10. Tsung压力测试介绍