1

如何使用 2 种方法(alert 和 console.log)编写函数(对象)以便能够像这样使用它:

fname("text").alert //-now text is alerted;
fname("text").cons //-now text shows in console log. 

就执行方式而言,这些方法并不重要。我知道它必须是自我调用功能,但我做不到。我不想以这种方式使用它 - fname.alert("text")。

问候克里斯

4

2 回答 2

5

不可能以任何理智的方式在任何地方都有效。您发布的示例将要求您为这些属性定义一个访问器 - 并且仅适用于现代 JS 引擎。

无论如何,这里的代码实际上可以做到这一点。但请不要在任何实际应用中使用它!查看最后一个代码块以获得更好的解决方案

function fname(message) {
    var obj = {};
    Object.defineProperty(obj, 'alert', {
        get: function() {
            alert(message);
        }
    });
    Object.defineProperty(obj, 'cons', {
        get: function() {
            console.log(message);
        }
    });
    return obj;
}

这是有效的,因为fname('hello').alert将导致alert执行该属性的 getter 函数 - 虽然这样的函数通常应该返回一个值,但没有什么可以阻止它执行诸如显示alert()消息之类的操作。


但是,您可以通过一种适用于任何地方的方式实现的目标是这样的:

fname('text').alert();
fname('text').cons();

这可以这样做:

function fname(message) {
    return {
        alert: function() {
            alert(message);
        },
        cons: function() {
            console.log(message);
        }
    }
}
于 2012-11-30T16:15:41.577 回答
4
function fname(str) {
   return {
      alert:function(){alert(str)},
      cons:function(){console.log(str)}
   }
}

fname("text").alert()警报text

于 2012-11-30T16:16:19.027 回答