当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中,字符串也是一个对象,对吗?
发布于 2010-08-17 06:07:32
不,与您要返回的字符串("hii"
)类似的字符串文本是原语值不是对象。
在JavaScript中,我们有以下原语:字符串、数字、布尔值、未定义的和空的。
如果与new
运算符一起使用的构造函数返回原语,则将返回this
值。
如果返回一个对象,如您的第二个示例( IMO并不真正有用),新创建的对象(构造函数中的this
)将丢失,并且您将得到一个错误,因为它不包含名为getDetails
的属性。
例如:
function Test () {
// don't return anything (equivalent to returning undefined)
}
new Test() instanceof Test; // true
function Test2 () {
return {};
}
new Test2 instanceof Test2; // false
发布于 2010-08-17 06:08:04
这是因为构造函数:
如果没有手动返回,则specified
this
对象,如果手动返回,则另一个对象是。
但是,您不能从对象手动返回原语值,例如原始字符串、数字或布尔值。您可以通过对象包装这个值来解决这个问题,以便它实际上是一个字符串对象:
return new String("hii");
https://stackoverflow.com/questions/3499703
复制相似问题