【发布时间】:2012-05-12 11:26:08
【问题描述】:
在 John Resig 在Simple "Class" Instantiation in Javascript 上的帖子中,他说:
"...如果您希望人们与之交互的频繁访问的函数(返回一个对象),那么将对象属性放在原型链中并实例化它对您有利。这里是, 在代码中:"
// Very fast
function User(){}
User.prototype = { /* Lots of properties ... */ };
// Very slow
function User(){
return { /* Lots of properties */ };
}
我想将其应用于如下函数(恰好位于“类”声明中)
//...
this.get_subscription = function(args)
{
return {
property_one: "value",
property_two: {
sub_prop: args.something
}
}
}
但不知道将参数放在哪里。如果我这样做了
this.get_subscription = function(args) {}
this.get_subscription.prototype = {
property_one: "value"
//...
}
它会说 args 是未定义的。我已经尝试了几种变体,但都不起作用。我应该如何正确地做到这一点,而不是将 args 放在父类的范围内?
【问题讨论】:
-
+1 提出了一个恰当的问题,但如果你仔细想想,你正在尝试的事情并没有多大意义。一个对象只有一个原型;但是对于每个
args,您返回的对象都不同。这真的是您代码中的瓶颈吗? -
另外,对您考虑的效率的评论。直接在对象中定义的成员实际上比原型中的成员访问得更快。成员查找首先查找对象,然后查找其原型,依此类推,直至原型链。
-
@Cameron:不特别。我只想在这个项目中拥有尽可能少的 JS,而我所拥有的,我想尽可能快地制作 :)。正如以下答案之一指出的那样,我似乎误解了原型。
标签: javascript optimization prototype