簡體   English   中英

從js中的對象返回值

[英]return a value from object in js

假設我在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; } 
}

那么我可以獲取該值,但是必須添加其他括號:

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

我不需要括號,所以我嘗試將代碼更改為:

function test(){
var value=true;

return (function(){ return value; } )();
}

但是作為回應,我再次得到測試{}在這種情況下如何編寫return語句?

我相信您需要執行以下操作:

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

接着

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

首先,我覺得有必要澄清可能的誤解:

function test(){
    var value=true;
}

不是具有私有變量的對象。 它是帶有局部變量的函數 當您使用new調用該函數時,它將創建一個從該函數的原型繼承而沒有屬性的對象。 如果正常調用該函數,則它僅執行函數主體並返回undefined (因為您未返回任何內容)。


解決方案:

您實際上需要構造函數嗎? 我問是因為您的示例非常簡單。 顯然,您不能讓函數返回兩個值,即true和object。

因此,您可以不使用new即可調用該函數:

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

var r = test();

如果您真的希望rtrue那么我認為沒有理由將該函數稱為構造函數。

之所以得到test {}原因是因為您使用new調用了函數。 如果這樣做,該函數將始終返回一個對象,並且如果您未顯式這樣做( value是布爾值,而不是對象),則該函數將隱式返回this對象(這是一個對象)。
如此反復,如果你真的想r等於value從函數內部,后來干脆不調用該函數new


但是,如果您需要一個對象,則有兩種方法:

您可以將值分配給屬性並訪問它,如PokeHerOne他的答案中顯示的那樣,或添加一個返回該值的函數,如papaiatis所 展示 優點是可以顯式訪問該值,並且其他查看您代碼的人都可以理解發生了什么。

此外,根據您要對該值/對象執行的操作,可以實現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是一個對象,但在各種操作中的行為類似於值truevalue )。 這很強大,但也可能造成很大的混亂,因為類型轉換在某種程度上是隱式的,並且不是JavaScript中經常使用的類型。

內部定義的二手方法:

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

var t = new TestClass();
alert(t.getValue()); // true

由於value定義為私有,因此無法從外部訪問:

alert(t.value) // undefined

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM