【问题标题】:When is it appropriate to create a static property instead of an instance in javascript objects?什么时候适合在 javascript 对象中创建静态属性而不是实例?
【发布时间】:2017-05-06 07:02:06
【问题描述】:

我不太了解如何/何时使用 javascript 原型。我了解这两种分配属性的方式之间的区别:

静态属性

var Date = function () {};
Date.setTime = function (key) {
};
Date.updateTime = function (key, value) {
};

setTime 和 updateTime 是直接添加到 Date 对象的属性。

为实例原型分配属性

var Date = function () {};
Date.prototype.setTime = function (key) {
};
Date.prototype.updateTime = function (key, value) {
};

setTime 和 updateTime 是 Date 实例将继承的已定义属性。

我的问题:您如何知道何时应该将属性分配给实例/原型或直接分配给对象(静态变量)?我什么时候应该决定将变量直接分配给一个对象,而不是让它对所有实例都可用?

【问题讨论】:

  • 好吧,Date.now() 之类的东西在不引用任何特定的现有 Date 实例的情况下是有意义的,而 Date.prototype.getFullYear() 则没有。你问的是这个吗?
  • @Pointy 我的问题是我应该什么时候决定将变量直接分配给对象而不是使其可用于所有实例?
  • 如果函数与任何特定实例没有任何关系,那么它可以继续构造函数本身。如果该函数仅在涉及实例时才有意义(例如,它必须在代码中引用 this.something),那么它必须位于原型上并且可用于实例。

标签: javascript javascript-objects


【解决方案1】:

完全取决于您要对对象执行的操作。如果您希望对象的实例能够使用具有自己属性的方法,您将希望原型具有这些方法。否则,如果您正在创建某种实用程序类,而您不希望该类保持任何状态,那么您可能应该只添加静态方法。

基本上,如果您希望对象的实例能够在方法中使用自己的状态,则在原型上设置方法。

var MyObj = function(prop) {
  this.myProp = prop;
}
MyObj.static = function() {
  console.log('This is static ' + this.myProp);
}
MyObj.prototype.dynamic = function() {
  console.log('This is dynamic ' + this.myProp);
}

var myInstance = new MyObj('wow!');

MyObj.static(); // 'This is static undefined'
// MyObj.dynamic(); // Not a function

// myInstance.static(); // Not a function either
myInstance.dynamic(); // 'This is dynamic wow!'

【讨论】:

  • 谢谢,这很有帮助。我理解其中的区别,但由于我是新手,因此很难在我的代码中实现这一点。
猜你喜欢
  • 2010-11-08
  • 1970-01-01
  • 2018-04-03
  • 2016-03-22
  • 2019-06-13
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
  • 2012-05-08
相关资源
最近更新 更多