大多数时候(主要是教程),我看过用于方法的“原型”。
我很确定它也可以用于变量(可能对设置“默认值”最有用)。有没有理由不经常用于功能?这是不好的做法,还是有显着的性能差异?
答案 0 :(得分:2)
在我的头顶,你失去了hasOwnProperty()
的功能,如果你在对象上进行for ... in
循环,这将非常有用。考虑这两个对象:
function MyObject() { ... }
MyObject.prototype.someProperty = 1;
var a = new MyObject();
var b = new MyObject();
b.someProperty = 2;
a.hasOwnProperty("someProperty"); // false
b.hasOwnProperty("someProperty"); // true
根据您的情况,这可能或不重要。
编辑:想到另一个人。如果在原型中存储对象,并且该对象的实例更改了该对象的属性,则会影响所有其他实例:
function MyObject() { ... }
MyObject.prototype.someProperty = { value: 1 };
var a = new MyObject();
var b = new MyObject();
b.someProperty.value = 2;
a.someProperty.value; // 2!! not 1
答案 1 :(得分:1)
反过来考虑一下:为什么要在对象的原型中存储对象的属性?
有两个答案:
如gilly3 mentioned,如果您不完全确定自己在做什么,可能会偶然发生。 (哦,是的,它发生在我身上......)
最佳实践:
[编辑]
[/编辑]
是的,使用原型的性能是slightly worse而不是其他方式。但是你永远不应该尝试优化这样的东西,因为性能增益几乎不可察觉,但代码的可读性和可维护性可能会受到很大影响。
答案 2 :(得分:-1)
从JavaScript 1.1开始引入的JavaScript原型对象是一个预构建的对象,它简化了向对象的所有实例添加自定义属性/方法的过程
您可以添加默认属性,这是一个示例:
function myObject()
{
this.constructor();
}
myObject.prototype =
{
constructor : function ()
{
this.MyProperty1 = "123456"; //default property
this.MyProperty2 = "bla"; //default property
}
};
如果这有帮助,请告诉我......