什么时候在javascript对象中创建静态属性而不是实例是合适的?
我真的不明白如何/何时使用javascript原型。我理解这两种分配属性的方法之间的区别: 静态属性什么时候在javascript对象中创建静态属性而不是实例是合适的?,javascript,javascript-objects,Javascript,Javascript Objects,我真的不明白如何/何时使用javascript原型。我理解这两种分配属性的方法之间的区别: 静态属性 var Date = function () {}; Date.setTime = function (key) { }; Date.updateTime = function (key, value) { }; setTime和updateTime是直接添加到Date对象的属性 将属性分配给实例原型 var Date = function () {}; Date.prototype.setT
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实例将继承的已定义属性
我的问题:您如何知道何时应该将属性分配给实例/原型或直接分配给对象(静态变量)?我应该在什么时候决定将变量直接分配给对象,还是将其分配给所有实例?完全取决于您希望对对象执行的操作。如果希望对象的实例能够使用具有自己属性的方法,则希望原型具有这些方法。否则,如果您正在创建某种类型的实用程序类,而您不希望该类保持任何状态,那么您可能只需要添加静态方法 基本上,如果您希望对象的实例能够在方法中使用它们自己的状态,那么就在原型上设置方法
var MyObj=函数(prop){
this.myProp=prop;
}
MyObj.static=函数(){
log('This is static'+This.myProp);
}
MyObj.prototype.dynamic=函数(){
log('This is dynamic'+This.myProp);
}
var myInstance=newmyobj('wow!');
MyObj.static();/'这是静态未定义的'
//MyObj.dynamic();//不是功能
//myInstance.static();//也不是一个函数
myInstance.dynamic();/'这是动态哇代码>类似于Date.now()
的东西在不引用任何特定的现有日期实例的情况下是有意义的,而Date.prototype.getFullYear()
则没有。这就是你要问的吗?@Pointy我的问题是,我应该在什么时候决定直接给一个对象分配一个变量,还是让它对所有实例都可用?如果函数与任何特定实例无关,那么它可以在构造函数本身上运行。如果该函数仅在涉及实例时才有意义(例如,它必须引用代码中的this.something
),那么它必须位于原型上并可供实例使用。谢谢,这很有帮助。我理解其中的区别,但在我的代码中很难实现这一点,因为我是新手。