簡體   English   中英

JavaScript 對象的動態屬性?

[英]Dynamic Property of JavaScript object?

我想知道這在 JavaScript 中是否可行,我想要一個可以包含動態屬性的對象。

舉個例子:

function MyObject()
{
}

var myobj = new MyObject();
myobj.property1 = "something";

alert(myobj.property1); // something
alert(myobj.property2); // this should never report error, instead the property should be evaluated to null, as it has never been set. 

有什么方法可以攔截 JavaScript 中的屬性調用,以便我可以主動將無值屬性設置為 null?

謝謝。

這大約是您可以實現目標的程度。

代碼:

var obj = {};
alert("prop: " + obj.prop);
obj.prop = "something";
alert("prop: " + obj.prop);
delete obj.prop;
alert("prop: " + obj.prop);

行為:

Alert: "prop: undefined"
Alert: "prop: something"
Alert: "prop: undefined"

“代理”可以做到這一點

var myobj = new Object();
var handler = {
    get:function (obj, name, proxyed){
        if(obj[name] !== undefined) // if obj[name] exist
            return obj[name];       // then return obj[name]
        return null; // if obj[name] is not exist then return null;
    }
};
var obj = new Proxy(myobj, handler);
obj.property1 = "something";

alert(myobj.property1); // something
alert(myobj.property2); // undefined

alert(obj.property1); // something
alert(obj.property2); // null

是的,但僅限於 2.0 及更高版本。 確切的語法仍然是待定的,但它看起來至少是對象文字的get * () {...}

不。 JavaScript 不是 Smalltalk。

無法攔截 JavaScript 中的直接屬性訪問。 當檢索到尚未設置的屬性時,結果將是undefined 盡管nullundefined通常被認為是同一個東西,但它們實際上是不同的實體。

在 JavaScript 中undefined意味着沒有值, null意味着值為 null。 在某些情況下,您可以混合使用 undefined 和 null。 例如,當使用==運算符時,它們是等效的( (null == undefined) === true )。 使用非強制運算符=== ,它們是不同的( (null === undefined) === false )。

您可以充分利用這一點。 雖然大多數人會聲稱您應該使用非強制相等運算符 ( === ),但將nullundefined放在同一個存儲桶中通常是安全的,當然,您實際上不太關心兩者之間的區別。 棘手的地方在於undefined是全局對象的一個​​屬性,因此可以為其分配一個新值。

如果有人說undefined = 'donkey'那么null == undefined將開始返回false 在實踐中,這幾乎從來都不是問題,因為大多數人不會愚蠢到重新分配 undefined 的值。

因此,以一種迂回的方式,只要您使用==將結果與null進行比較,您就不需要捕獲屬性訪問來為尚未設置的屬性返回null

否,除非您正在操作由 NPAPI 插件控制的對象,在這種情況下您可以實現預期的行為。

換句話說,通過 NPAPI 插件,您可以實現您正在尋找的行為。

查看 javascript 原型。 我認為這至少會給你一些你正在尋找的東西。 只需谷歌搜索“javascript 原型”。

在您的示例中,第二個警報不會產生錯誤。 它只會提醒undefined 訪問屬性的屬性會產生錯誤:

myobj.property2.property3

暫無
暫無

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

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