0

私は次のオブジェクトを持っています:

​var x = {
    y: '33', 
    z: '88', 
    m: function() {
        alert('this is the m element');
    }
};

x.newObject = function() {
    alert('mm'); 

    function click(myval) {
        alert('you have select the click function' + myval); 
    }
};

x.newObject.click('clickme'); ​​​​​​​​​// This is what I have tried; it's not working. 

のクリック関数を呼び出すにはどうすればよいnewObjectですか?

jsFiddle

4

5 に答える 5

5

clickコーディング方法では、別の関数内にあるため、関数にアクセスできません。

この方法でコーディングすることを主張する場合は、オブジェクトにnewObject(関数である)returnを呼び出してclick、アクセスできるようにします。これは通常、関数呼び出し「チェーン」と呼ばれ、前の呼び出しが次の呼び出しで使用できるオブジェクトを返します。

x.newObject = function(){
    alert('monmon') ; 

    return {
        click : function (myval){
            alert('you have select the click function' + myval) ; 
        }
    }
}

//a call to newObject returns an object with a click function
x.newObject().click('clickme')
于 2012-07-09T20:26:46.997 に答える
1

これはうまくいきました:

var x = {
    y: '33',
    z: '88',
    m: function() {
        alert('this is the m element');

    }
}

x.newObject = new function() {
    return {
        click: function(myval) {
            alert('you have select the click function' + myval);

        }
    }
}

x.newObject.click('clickme');​
于 2012-07-09T20:27:15.477 に答える
1

clickスコープはnewObject内にあるため、newObjectの外部では使用できません。メソッドを使用してオブジェクトを作成しようとしていますか?もしそうなら、それをプロトタイプに追加します:

newObject = function() { ... };
newObject.prototype = {
   click: function(myval){ .. }
};

//now you can call newObject.click()

または、newObjectに公開するメソッドを返すようにすることもできます。

newObject = function(){
    return {
        click: function(myval){ ...}
    }
};
于 2012-07-09T20:28:41.923 に答える
0

簡単な答え:まさか。長い答え:「クリック」は、より大きな関数内ではローカル変数のように扱われ、宣言された関数外ではローカル変数にアクセスできません。'クリック'関数をグローバルにアクセスされるプロパティまたは変数に割り当てる必要があります。

于 2012-07-09T20:27:06.340 に答える
0

たぶんnewObject、関数ではなく、オブジェクトであるべきです。次のコードは私のために働きます

var x = {
    y: '33',
    z: '88',
    m: function() {
        alert('this is the m element');

    }
}
x.newObject = {

    click: function(myval) {
        alert('you have select the click function' + myval);

    }
}

x.newObject.click();​
于 2012-07-09T20:36:27.930 に答える