调用对象的方法

时间:2012-07-09 20:22:24

标签: javascript

我有以下对象:

​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

5 个答案:

答案 0 :(得分:5)

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

如果你坚持用这种方式编码,请调用newObject(这是一个函数)在对象中返回click,以便可以访问它。它通常被称为函数调用“chaining”,其中前一个调用返回一个对象,然后下一个调用可以使用:

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')

答案 1 :(得分: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');​

答案 2 :(得分:1)

click在newObject范围内,因此在newObject之外的任何地方都不可用。您是否尝试使用方法创建对象?如果是这样,请将其添加到原型中:

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

//now you can call newObject.click()

或者你可以让newObject返回你想要公开的方法:

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

答案 3 :(得分:0)

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

答案 4 :(得分: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();​