当myClass
函数返回单个字符串“hii”时,testClass.getDetails()
工作正常:
function myClass(name, age) {
this.name = name;
this.age = age;
return "hii";
}
myClass.prototype.getDetails = function() {
return "mydetails";
}
var testClass = new myClass('aneesh', 27);
alert(testClass.getDetails());
但是当我在myClass
中返回一个对象时:
function myClass(name, age) {
this.name = name;
this.age = age;
return {};
}
我收到错误:
testClass.getDetails不是函数
为什么会这样?在Javascript中,字符串也是一个对象,对吗?
答案 0 :(得分:0)
不,像您要返回的字符串文字("hii"
)是原始值不是对象。
在JavaScript中,我们有以下原语:string,number,boolean,undefined和null。
如果与new
运算符一起使用的构造函数返回原语,则将返回this
值。
如果返回一个对象,就像在你的第二个例子中那样(IMO不是很有用),新创建的对象(构造函数中的this
)将会丢失,并且你会收到错误,因为它没有t包含名为getDetails
的属性。
例如:
function Test () {
// don't return anything (equivalent to returning undefined)
}
new Test() instanceof Test; // true
function Test2 () {
return {};
}
new Test2 instanceof Test2; // false
答案 1 :(得分:0)
这是因为构造函数:
this
对象但是,您无法手动从对象返回原始值,例如原始字符串,数字或布尔值。您可以通过对象包装值来解决这个问题,使它实际上是一个String对象:
return new String("hii");