簡體   English   中英

對象/哈希中的Javascript函數

[英]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.

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