Javascript 从js中的对象返回值

Javascript 从js中的对象返回值,javascript,Javascript,假设我在js中有一个简单的对象,其中有一个私有变量: function test(){ var value=true; } 现在我想创建一个实例: var r=new test() //I want to get r === true 如何从中返回值 如果我写: function test(){ var value=true; return value; } function test(){ var value=true; return function(){ return value

假设我在js中有一个简单的对象,其中有一个私有变量:

function test(){
var value=true;
}
现在我想创建一个实例:

var r=new test() //I want to get r === true
如何从中返回值

如果我写:

function test(){
var value=true;

return value;
}
function test(){
var value=true;

return function(){ return value; } 
}
我有一个测试结果

如果我写:

function test(){
var value=true;

return value;
}
function test(){
var value=true;

return function(){ return value; } 
}
然后我可以得到该值,但我必须添加额外的括号:

var r=new test()//r==true

我不需要括号,因此我尝试将代码更改为:

function test(){
var value=true;

return (function(){ return value; } )();
}
但作为回应,我再次得到了test{}
在这种情况下,如何编写返回语句?

我认为您需要执行以下操作:

function test(){
    this.value = true;
}
然后

var r=new test();
if (r.value == true) {
    //Do something
}

使用内部定义的方法:

function TestClass(){
    var value = true;
    this.getValue = function(){
        return value;
    };
}

var t = new TestClass();
alert(t.getValue()); // true
由于
定义为私有,因此无法从外部访问:

alert(t.value) // undefined

首先,我觉得有必要澄清一个可能的误解:

function test(){
    var value=true;
}
不是具有私有变量的对象。它是一个带有局部变量的函数。当您使用
new
调用函数时,它会创建一个继承自函数原型的对象,而不包含任何属性。如果您正常调用函数,它只执行函数体并返回
未定义的
(因为您没有返回任何内容)


解决: 你真的需要一个构造函数吗?我这样问是因为你的例子很简单。显然,您不能让函数返回两个值,
true
和对象

因此,您可以只调用函数而不使用
new

function test() {
    var value = true;
    return value;
}

var r = test();
如果您确实希望
r
true
,那么我认为没有理由将该函数作为构造函数调用

之所以得到
test{}
作为结果,是因为您使用
new
调用了该函数。如果您这样做,函数将始终返回一个对象,如果您不显式地这样做(
value
是一个布尔值,而不是一个对象),它将隐式地返回
this
(这是一个对象)。
同样,如果您真的希望函数内部的
r
等于
value
,那么就不要使用
new
调用函数


但是,如果您需要对象,有两种方法:

您可以将该值分配给属性并访问它,如中所示,或者添加一个返回该值的函数,如中所示。优点是可以显式地访问该值,并且查看代码的其他人可以理解发生了什么

此外,根据您希望对该值/对象执行的操作,您可以实现
valueOf
方法,该方法由各种操作符调用

例如:

function Test(){
    var value = true;

    this.valueOf = function() {
        return value;
    }
}

var t = new Test();
console.log(t);          // logs the Test instance
console.log(t == true);  // logs `true`

也就是说,
t
是一个对象,但在各种操作中的行为类似于值
true
value
)。这是强大的,但也可能相当混乱,因为类型转换是隐式的,并且在JavaScript中不经常使用。

他希望
是私有的。这不是私有声明。我认为他在第一个示例中并不是有意将其私有化,而是可以这样做:var test=(function(){var value=true;return value;})();我不知道如何把它放在代码格式中,但是,哦,你得到了一个很好的答案!如果我可以的话,我会给你的不仅仅是+1。谢谢你教我新东西!