[英]Dynamically modify JS Object's behavior
是否有可能在運行時決定應枚舉JS對象的哪些屬性?
就像是
myobj = {};
myobj.keys = function() { // I made this keys function up. Is there something like that in JS?
if ((new Date).getSeconds() < 30)
return [1,2,3];
else
return [4,5,6];
}
for(p in myobj)
console.log(p); // returns either 1,2,3 or 4,5,6
此外,如果對象的屬性不存在,是否可以調用函數? 就像是
myobj.fallbackFunction = function(arg) { return arg; };
console.log( myobj['nonexisting-property'] ); // returns the string 'nonexisting-property'
我的最后一個問題:是否可以將對象作為函數調用? 喜歡
myobj.call = function(arg) { console.log(arg) };
myobj(123) // returns 123`
抱歉,我看過Qt的QScriptEngine,您可以在其中執行類似的操作,但是我不知道如何在本機JS中實現此功能...
干杯,曼努埃爾
可以使用ECMAScript 5中的Object.defineProperty來控制枚舉對象的哪些屬性, 當前該方法正進入瀏覽器 :
var o = { "foo": 1, "bar": 2 };
for (var i in o) { console.log(i); } // Logs "foo" and "bar";
Object.defineProperty(o, "foo", { enumerable: false });
for (var i in o) { console.log(i); } // Logs just "bar";
在下一部分中,如果對象的屬性未定義,則沒有標准化或跨瀏覽器的方法來調用方法。
最后,您不能使任何舊對象都可以作為函數調用,但是您可以首先將變量定義為函數,並且它將具有對象的所有常規功能,因為函數本身就是對象( Function.prototype
繼承自Object.prototype
)。 例如,您可以將屬性分配給函數:
var f = function() { alert("Hello"); };
f.myProp = 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.