2017-01-23 87 views
0

当我使用String构造函数时,我总是想知道它是如何制作的。它返回的字符串作为参数指定,尽管它与“new”运算符类似:构造函数返回值不是“[Object object]”

var str = new String("Hello World") 
    //str == "Hello World" 

如果我做一个构造函数,我给它返回一个返回值的对象实例化时:

function CreateString(st) { 
    return ''+st 
    } 
    var MyString = new CreateString("Hello there!") 
    //MyString == "[Object object]" 

我怎样才能创建一个返回除此之外值的构造函数[Object对象] ?

更新: 我试图创建一个具有两个属性的值等本身就是一个构造函数:

function MyConstructor() { 
    this.myMethod = function() { 
    return 73 
    } 
    return 25 
    } 
    /*I want MyConstructor to have the value 25 and the myMethod method */ 
    alert(MyConstructor()) // to be 25 
    alert(MyConstructor().myMethod()) //to be 73 
+0

有非常,非常少的原因,以创建String实例。 – Pointy

+0

你想做什么?创建一个新的'类'或只是创建一个对象以外的东西? – Shilly

回答

1

您可以替换所需类toString()函数定义。

function CreateString() { 
    function toString() { return 'foo' } 
} 

例子:Number.prototype.toString()

+0

是的。这工作。但构造函数本身总是返回对象 –

+0

@MichaelRitter请参阅http://stackoverflow.com/a/6307570/2013580和http://stackoverflow.com/questions/332422 – zurfyx

+0

这些链接应显示给我什么?仅仅因为一个类有一个toString方法,构造函数仍然返回一个类实例,而不是toString()调用的值(除非您打印它,它会自动调用.toString()) –

0

通过这条线

var MyString = new CreateString("Hello there!") 

你不能简单地调用函数CreateString,你要创建的 '类型' CreateString(的一个实例的新对象功能)。

我猜你想要的只是

var MyString = CreateString("Hello there!") 
相关问题