class People {
constructor() {
this.getName = function() {
}
}
getAge() {
}
}
// getName和getAge有啥区别
class People {
constructor() {
this.getName = function() {
}
}
getAge() {
}
}
// getName和getAge有啥区别
// 在实例上
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在每个实例里都需要创建一次。
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
6 回答1.1k 阅读
1: 你的写法就是错的啊class People() { 应该是 class People {
2: getAge挂在实例的prototype上, getName在对象身上
3: 建议学class 之前先学原型链