当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 浅谈javascript中的constructor

浅谈javascript中的constructor

2019年07月30日  | 移动技术网IT编程  | 我要评论

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;
  }
}

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网