如内容所示,getName和getAge有啥区别

class People {
    constructor() {
        this.getName = function() {
        }
    }
    getAge() {
    
    }
}
// getName和getAge有啥区别
阅读 2.7k
3 个回答

1: 你的写法就是错的啊class People() { 应该是 class People {
2: getAge挂在实例的prototype上, getName在对象身上
3: 建议学class 之前先学原型链

// 在实例上
instance.hasOwnProperty('getName') // true
// 在原型上
instance.hasOwnProperty('getAge') // false

上面浪费内存

es6的class其实是语法糖,跟老版本的原型的继承是一样的。

function People() {
  this.getName = function() {};
}
People.prototype.getAge = function() {};

class People {
  constructor() {
    this.getName = function() {};
  }
  getAge() {}
}

不一样之处,在于如果在构造器里创建实例属性,那么这个类的实例每次被创建的时候都会对该属性分配一个值,而放在原型里,根据原型链需要访问实例的某个属性,如果实例没有,则会访问原型里的属性,所以getAge在这里只会创建一份,而getName在每个实例里都需要创建一次。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题