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. 

如何调用 click 函数newObject

jsFiddle

4

5 回答 5

5

在您对其进行编码的方式中,您无法访问click函数,因为它在另一个函数中。

如果您坚持以这种方式编码,请在对象中调用newObject(这是一个函数)返回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

也许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 回答
0

简短的回答:不可能。长答案:“单击”在某种程度上被视为较大函数中的局部变量,您无法在声明它们的函数之外访问局部变量。您需要将“点击”功能分配给一些全局访问的属性或变量。

于 2012-07-09T20:27:06.340 回答