以下两个声明有什么区别?
Class.method = function () { /* code */ }
Class.prototype.method = function () { /* code using this.values */ }
是否可以将第一条语句视为静态方法的声明,而将第二条语句视为实例方法的声明,可以吗?
以下两个声明有什么区别?
Class.method = function () { /* code */ }
Class.prototype.method = function () { /* code using this.values */ }
是否可以将第一条语句视为静态方法的声明,而将第二条语句视为实例方法的声明,可以吗?
当创建多个MyClass实例时,内存中仍然仍然只有一个publicMethod实例,但是如果使用privateMethod,则最终将创建大量实例,而staticMethod与对象实例没有任何关系。
这就是原型节省内存的原因。
另外,如果您更改父对象的属性,并且未更改子对象的相应属性,则会对其进行更新。
是的,第一个是
static method
也称为class method
,而第二个是instance method
。考虑以下示例,以更详细地理解它。
在ES5中
在上面的代码中,
isPerson
是的静态方法,sayHi
而是的实例方法Person
。下面是如何从
Person
构造函数创建对象。var aminu = new Person("Aminu", "Abubakar");
使用静态方法
isPerson
。Person.isPerson(aminu); // will return true
使用实例方法
sayHi
。aminu.sayHi(); // will return "Hi Aminu"
在ES6中
看看如何使用
static
关键字声明静态方法isPerson
。创建
Person
类的对象。const aminu = new Person("Aminu", "Abubakar");
使用静态方法
isPerson
。Person.isPerson(aminu); // will return true
使用实例方法
sayHi
。aminu.sayHi(); // will return "Hi Aminu"
注意:这两个示例本质上是相同的,JavaScript仍然是一种无类语言。在
class
中介绍ES6主要是在现有的基于原型的继承模型是语法糖。