使用在JavaScript中创建类的“旧方法”,您通常会避免这样做:
function Car {
this.make = "Renault";
this.model = "Twingo";
this.name = function () {
return this.make + this.model;
};
}
因为它将在类的每个实例创建一个新的函数对象,所以您宁愿这样做:
function Car {
this.make = "Renault";
this.model = "Twingo";
}
Car.prototype.name = function() {
return this.make + this.model;
}
在ES6中,使用更新的class
语法,我们可以执行以下操作:
class Car {
constructor(make, model) {
this.make = make;
this.model = model;
}
name () {
return this.make + this.model;
}
}
这仅创建一个共享功能对象吗?还是在每个new
调用中都像第一个一样实例一个新的?
答案 0 :(得分:2)
将为每个实例创建在构造函数中定义为属性的函数。您在外部构造函数中定义的函数将在该原型上可用。因此,名称functon将仅创建一次。
说这是你的课程
class Test {
constructor(prop1, prop2) {
this.prop1 = prop1;
this.prop2 = prop2;
this.func1 = function() {};
}
func2() {}
}
const test = new Test('one','two');
如果签入devtools,则可以看到func1可用于每个实例,而func2可用于原型。
Test {prop1: "one", prop2: "two", func1: ƒ}
func1: ƒ ()
prop1: "one"
prop2: "two"
__proto__:
constructor: class Test
func2: ƒ func2()