Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么时候在javascript对象中创建静态属性而不是实例是合适的?_Javascript_Javascript Objects - Fatal编程技术网

什么时候在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

我真的不明白如何/何时使用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实例将继承的已定义属性


我的问题:您如何知道何时应该将属性分配给实例/原型或直接分配给对象(静态变量)?我应该在什么时候决定将变量直接分配给对象,还是将其分配给所有实例?

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

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

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
),那么它必须位于原型上并可供实例使用。谢谢,这很有帮助。我理解其中的区别,但在我的代码中很难实现这一点,因为我是新手。