具有方法和自己返回的对象

时间:2014-07-25 03:13:01

标签: javascript object

我试图在没有成功的情况下尝试像其他语言一样,该对象可以具有默认的返回值,但还有其方法。像:

var o = {
    this: "MyReturn",
    SampleString: "My String",
    MyMethod1: function() {},
    MyMethod2: function() {},
}

然后,我的输出应该是:

> o
< "MyReturn"
> o.SampleString
< "My String"
> o.MyMethod1()
< function() {}

有可能吗? (以不使用Prototype的方式,或者它与我的代码冲突)

3 个答案:

答案 0 :(得分:2)

这是不可能的。 o永远是一个对象。您最接近的方法是自定义toString方法并将o投射到字符串或将对象设为Function并调用o o()

这里有一些选项可以像JavaScript一样接近。


选项1:使o成为一个函数对象并调用它。

var o = function(){
  return "MyReturn";
};
o.SampleString = "My String";
o.MyMethod1 = function() {};
o.MyMethod2 = function() {};

<强>输出

> o()
< "MyReturn"
> o.SampleString
< "My String"
> o.MyMethod1()
< function() {}


选项2:自定义toString方法。

var o = {
    toString: function(){return "MyReturn";},
    SampleString: "My String",
    MyMethod1: function() {},
    MyMethod2: function() {},
}

<强>输出

> String(o)
< "MyReturn"
> o.SampleString
< "My String"
> o.MyMethod1()
< function() {}

在第二个选项中,String(o)可以替换""+oo.toString()或者导致类型转换为字符串的anthing。

答案 1 :(得分:1)

您正在寻找toString()方法。

  

每个对象都有一个toString()方法,当要将对象表示为文本值或者以期望字符串的方式引用对象时,会自动调用该方法。默认情况下,toString()方法由来自Object的每个对象继承。如果在自定义对象中未覆盖此方法,则toString()将返回“[object type]”,其中type是对象类型。   来源:MDN Object.prototype.toString()

var o = {    
    SampleString: "My String",
    MyMethod1: function() {},
    MyMethod2: function() {}

};

o.toString = function () {
   return "MyReturn";
};

alert(o);
// MyReturn;

alert(o.SampleString);
// My String;

alert(o.MyMethod1);
// function () {}

<强> JSFIDDLE

答案 2 :(得分:0)

我认为最接近的是

 var o = {name:"myName"};    
 o.toString = function(){return o.name}    
 console.log(o+"");