[英]How can I modify the properties of a promise to be equal to the properties of an object in AngularJS?
[英]How come I can modify the properties of a named return object inside of a module, but not modify the object itself?
這是來自 YDKJS Scope & Closures 中的一個示例:
var foo = (function CoolModule(id) {
function change() {
// modifying the public API
publicAPI.identify = identify2;
}
function identify1() {
console.log(id);
}
function identify2() {
console.log(id.toUpperCase());
}
var publicAPI = {
change: change,
identify: identify1
};
return publicAPI;
})("foo module");
foo.identify(); // foo module
foo.change();
foo.identify(); // FOO MODULE
在函數change()
,我通過將不同的函數分配給“identify”鍵來修改返回對象的內容。 實際上,我可以將任何鍵的值更改為這樣的任何值:例如, publiAPI.change = null;
我什至可以通過這種方式添加新屬性,例如publicAPI.newFunc = function(){console.log("hi");}
。 但是,我不能執行publicAPI = {}
或設置 publicAPI 對象本身,例如publicAPI = {a: 1}
。 為什么會這樣? 有沒有辦法修改對象本身? 我什至可以使用 delete 運算符來刪除屬性。
但是,我不能執行
publicAPI = {}
或設置publicAPI
對象本身,例如publicAPI = {a: 1}
。
是的你可以。 它對foo
根本沒有影響。
為什么會這樣?
因為當你這樣做時:
return publicAPI;
返回的是publicAPI
的值,而不是對變量的引用。 該值是對象引用。 如果稍后更改publicAPI
變量中的值,則不會影響任何已收到變量先前值的內容。
有沒有辦法修改對象本身?
您分配給identify
屬性的示例會更改對象(例如,更改對象屬性之一的狀態)。 但改變foo
所指對象的唯一方法是分配給foo
。 您對publicAPI
任何事情publicAPI
能改變對象foo
所指的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.