通常,在构造函数中,绑定到函数内的对象在使用前缀this
调用时由它返回。new
但我想也有可能(我想我什至在 crockford 的书中读过这个)手动返回你自己的值。有没有这样的做法有用的地方?
问问题
112 次
4 回答
4
如果你想实现一个单例模式,这可以被使用,通过确保在第一次构造对象之后你永远不会构造另一个对象 - 而是返回第一个构造的对象。
IE
if(!TheClass.singleton) TheClass.singleton = this;
return TheClass.singleton
于 2012-11-21T01:13:28.557 回答
4
如果您从构造函数返回值类型,您将获得不同的行为,具体取决于是否new
使用。就是这样String
工作的。在你的 JavaScript 控制台中查看这个对象:
{
s: String("abc"),
S: new String("abc")
}
Littles
包含一个字符串值,但 bigS
包含一个字符串 Object。一个微妙的区别,也许。
您可以超越这一点,将相同的功能用于不同的目的:
function Foo() {
return "abc";
}
Foo.prototype.DoSomething = function () {
// something completely unrelated to "abc"
};
var a = Foo(); // The string "abc". Does not have a DoSomething() method.
var b = new Foo(); // An Object with a DoSomething() method. Doesn't know about "abc".
根据是否new
使用过,你会得到完全不同的东西。
于 2012-11-21T01:28:06.773 回答
3
构造函数(即用 调用的函数new
)总是返回一个对象,这是this
默认值。new
在某些情况下,您可能会在不使用 say的情况下防止调用:
function Foo(arg) {
if ( !(this instanceof Foo) ) {
return new Foo(arg);
}
this.blah = arg;
}
因此,您向函数返回了一个不同的对象this
,但它仍然返回自身的一个实例。
于 2012-11-21T01:27:42.623 回答
2
是的,这样想。
item = function(id){
if(alreadytaken(id)){
return cache[id];
}else{
cache[id] = this;
}
}
var newitem = new item(1);
var newitem2 = new item(1);
此示例检查 ID 以查看它是否已存在。如果是这样,那么它将强制返回已经存在的对象,这是我过去实际使用过的东西。
于 2012-11-21T01:20:37.930 回答