[英]JS - From an object, return an object for each value of a certain key
[英]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();
如果您真的希望r
為true
那么我認為沒有理由將該函數稱為構造函數。
之所以得到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
是一個對象,但在各種操作中的行為類似於值true
( value
)。 這很強大,但也可能造成很大的混亂,因為類型轉換在某種程度上是隱式的,並且不是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.