2

我如何创建一个既是函数又是对象的东西?
假设它的名字是obj
在以下上下文中,它是一个对象:

obj.key1 = "abc";
obj.key2 = "xyz";

在另一种情况下,它是这样的函数:

var test = obj("abc");

如何在 JavaScript 中创建这个对象?

4

2 回答 2

2

像这样:

 function obj( param ) {
     console.log( param );
 }

 obj.prototype.key1 = "abc";
 obj.prototype.key2 = "xyz"; 

 var test = new obj( "abc" );
 console.log( test.key1 );
 console.log( test.key2 );

new保存函数上下文所需的密钥。您可以使用return thisin 函数来避免这种情况。

或使用this代替原型:

 function obj( param ) {
     console.log( param );
     this.key1 = "abc";
     this.key2 = "xyz";
 }
于 2013-08-01T11:12:32.980 回答
2
function obj( param ){
    var that = this;

    that.key1 = "default";
    that.key2 = "default";

    that.someMethod = function(){
        return param;
    };

    that.showMessage = function(){
        alert( param );
    };

    return that;
}

接着:

var test = obj("hi there");
test.key1 = "abc";
test.key2 = "xyz";
test.showMessage();

小提琴:http : //jsfiddle.net/Xnye5/

或者

obj("hi there again").showMessage();

小提琴:http : //jsfiddle.net/Xnye5/1

于 2013-08-01T11:13:24.370 回答