欢迎来到福编程网,本站提供各种互联网专业知识!

浅谈javascript中的constructor

发布时间:2016-06-08 作者:投稿jingxian 来源:转载
下面小编就为大家带来一篇浅谈javascript中的constructor。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

constructor,构造函数,对这个名字,我们都不陌生,constructor始终指向创建当前对象的构造函数。

这里有一点需要注意的是,每个函数都有一个prototype属性,这个prototype的constructor指向这个函数,这个时候我们修改这个函数的prototype时,就发生了意外。如

代码
  1. function Person(name,age){
  2. this.name = name;
  3. this.age = age;
  4. }
  5. Person.prototype.getAge = function(){
  6. return this.age;
  7. }
  8. Person.prototype.getName = function(){
  9. return this.name;
  10. }
  11. var p = new Person("Nicholas",18);
  12. console.log(p.constructor); //Person(name, age)
  13. console.log(p.getAge()); //18
  14. console.log(p.getName()); //Nicholas

但是如果是这样:

代码
  1. function Person(name,age){
  2. this.name = name;
  3. this.age = age;
  4. }
  5. Person.prototype = {
  6. getName:function(){
  7. return this.name;
  8. },
  9. getAge:function(){
  10. return this.age;
  11. }
  12. }
  13. var p = new Person("Nicholas",18);
  14. console.log(p.constructor); //Object()
  15. console.log(p.getAge()); //18
  16. console.log(p.getName()); //Nicholas

结果constructor变了。

原因就是prototype本身也是对象,上面的代码等价于

代码
  1. Person.prototype = new Object({
  2. getName:function(){
  3. return this.name;
  4. },
  5. getAge:function(){
  6. return this.age;
  7. }
  8. });

因为constructor始终指向创建当前对象的构造函数,那么就不难理解上面代码p.constructor输出的是Object了。

对于修改了prototype之后的constructor还想让它指向Person怎么办呢?简单,直接给Person.prototype.constructor赋值就可以了:

代码
  1. Person.prototype = {
  2. constructor:Person,
  3. getName:function(){
  4. return this.name;
  5. },
  6. getAge:function(){
  7. return this.age;
  8. }
  9. }

以上这篇浅谈javascript中的constructor就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持全福编程网。

相关推荐

返回顶部