Javascript类防御
当Javascript类防御,javascript,inheritance,class,Javascript,Inheritance,Class,当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('anees
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中,字符串也是一个对象,对吗?不,像您返回的字符串文本(
“hii”
)是一个基本值不是一个对象
在JavaScript中,我们有以下原语:string、number、boolean、undefined和null
如果与new
运算符一起使用的构造函数返回原语,则将返回此
值
如果返回了一个对象,如第二个示例(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
这是因为构造函数:
- 如果未指定手动返回,则自动返回新的
对象此
- 如果手动返回,则返回您选择的另一个对象
return new String("hii");