![](/img/trans.png)
[英]Javascript function returning '[object Object]' instead of hash
[英]Javascript function in an object/hash
我可以直接調用函數(我將使用alert
作為示例),就像這樣
alert("Hello World!"); // pops up an alert window
但是,當我將一個函數放在一個對象中時,調用它不再有效:
d = {func: alert};
d.func("Hello World!"); // doesn't do anything
d["func"]("Hello World!"); // also doesn't do anything
我想也許我需要明確傳遞一個空白的this
論點,所以我試過了
d.func(null, "Hello World!") // still nothing
但無濟於事。 有趣的是,這確實有效
d.func.apply(null, ["Hello World!"]); // success!
但這是無比冗長的,這讓我的牙齒受傷(引用JWZ)。 是否有更簡潔,不那么丑陋的方式?
JavaScript中的函數按值傳遞。 alert()
函數是本機實現的,這意味着它沒有JavaScript值。 根據您的瀏覽器,本機包裝器的平均值(原諒我)會有所不同。 你的代碼實際上可以在谷歌瀏覽器中使用,但在Firefox中不起作用,而且我會說它在Internet Explorer中也不起作用,這通常對修改本機對象不友好。功能。 您可以使用以下代碼:
d = {
func: function (message) {
alert(message);
}
};
如果你試試這個:
function test(x) {
alert(x);
}
var x = {func: test}
x.func('Hi!');
它按預期工作。 當我嘗試這樣做直接alert
Firebug給我以下錯誤信息:
[Exception... "Cannot modify properties of a WrappedNative"
nsresult: "0x80570034 (NS_ERROR_XPC_CANT_MODIFY_PROP_ON_WN)"
location: "JS frame :: http://stackoverflow.com/questions/859466/javascript-function-in-an-object-hash :: anonymous :: line 72" data: no]
所以我猜這是一個安全的事情,或者它與本機功能有關。
我總是這樣做:
var d = Object;
d.hello = function(msg) {
alert(msg)
};
d.hello('hello');
當然,您也可以使用PrototypeJS來獲取所有面向對象:
var Message = Class.create( {
display: function(msg) {
alert(msg);
}
});
var msg = new Message();
msg.display('hello');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.