使用新操作符初始化单例javascript对象?

使用新操作符初始化单例javascript对象?,javascript,Javascript,在javascript中,以下内容之间的区别是什么: var singleton = function(){ ... } 及 ? crockford所描述的声明私有函数只适用于后者。区别主要在于,在第二个示例中,您将函数表达式用作,新运算符将使函数自动执行,该函数中的此值将引用新创建的对象 如果不返回任何内容或不从该函数返回非原语值,则该值将被返回并分配给singleton变量 在第二个示例中也可以使用特权方法,常见的模式是使用,创建一个可以访问私有成员的方法,然后可以返回包含公共API的对象

在javascript中,以下内容之间的区别是什么:

var singleton = function(){ ... }

?


crockford所描述的声明私有函数只适用于后者。

区别主要在于,在第二个示例中,您将函数表达式用作,新运算符将使函数自动执行,该函数中的此值将引用新创建的对象

如果不返回任何内容或不从该函数返回非原语值,则该值将被返回并分配给singleton变量

在第二个示例中也可以使用特权方法,常见的模式是使用,创建一个可以访问私有成员的方法,然后可以返回包含公共API的对象,例如:


区别主要在于,在第二个示例中,您将函数表达式用作,新运算符将使函数自动执行,该函数中的此值将引用新创建的对象

如果不返回任何内容或不从该函数返回非原语值,则该值将被返回并分配给singleton变量

在第二个示例中也可以使用特权方法,常见的模式是使用,创建一个可以访问私有成员的方法,然后可以返回包含公共API的对象,例如:


我认为crockford描述的特权函数如下所示:

function Test() {
     this.privileged = function() {
          alert('apple');
     }
     function anonymous() {
         alert('hello');
     }
     anonymous();
}

t = new Test; // hello
t.privileged(); // apple

// unlike the anonymous function, the privileged function can be accessed and
// modified after its declaration

t.privileged = function() {
     alert('orange');
}

t.privileged(); // orange

我认为crockford描述的特权函数如下所示:

function Test() {
     this.privileged = function() {
          alert('apple');
     }
     function anonymous() {
         alert('hello');
     }
     anonymous();
}

t = new Test; // hello
t.privileged(); // apple

// unlike the anonymous function, the privileged function can be accessed and
// modified after its declaration

t.privileged = function() {
     alert('orange');
}

t.privileged(); // orange

这确实是一个特权函数,但不是单例。这确实是一个特权函数,但不是单例。我很困惑,因为你的问题的主体与标题中的问题不匹配。这有点不幸,因为我真的很想知道如果你打电话给单身人士会发生什么。主要是,当您这样做时会发生什么:var singleton=new function{return function{};};新函数是否应用于返回的函数?我想“singleton”的意思不一样。至于您的问题,请看下面CMS的回答:新操作符将导致函数自动执行,该函数中的this值将引用新创建的对象。如果不返回任何内容或不从该函数返回非原语值,此值将返回并分配给singleton变量。singleton是对象的单个实例,不需要新的运算符。至少,这是一些人在提到JavaScript时使用的术语。如果你有不同的定义,那很酷。至于我发布的那段代码:我尝试过,但失败了。因为将函数包装在括号中并附加它会执行函数并立即返回一个对象,所以新函数对对象不起作用。我很困惑,因为你的问题主体与标题中的问题不匹配。这有点不幸,因为我真的很想知道如果你打电话给单身人士会发生什么。主要是,当您这样做时会发生什么:var singleton=new function{return function{};};新函数是否应用于返回的函数?我想“singleton”的意思不一样。至于您的问题,请看下面CMS的回答:新操作符将导致函数自动执行,该函数中的this值将引用新创建的对象。如果不返回任何内容或不从该函数返回非原语值,此值将返回并分配给singleton变量。singleton是对象的单个实例,不需要新的运算符。至少,这是一些人在提到JavaScript时使用的术语。如果你有不同的定义,那很酷。至于我发布的那段代码:我尝试过,但失败了。因为将函数包装在括号中并附加它会执行函数并立即返回一个对象,所以新函数对对象不起作用。
function Test() {
     this.privileged = function() {
          alert('apple');
     }
     function anonymous() {
         alert('hello');
     }
     anonymous();
}

t = new Test; // hello
t.privileged(); // apple

// unlike the anonymous function, the privileged function can be accessed and
// modified after its declaration

t.privileged = function() {
     alert('orange');
}

t.privileged(); // orange