Javascript类定义

时间:2010-08-17 06:01:53

标签: 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('aneesh', 27);
alert(testClass.getDetails());

但是当我在myClass中返回一个对象时:

function myClass(name, age) {
    this.name = name;
    this.age = age;
    return {};
}

我收到错误:

  

testClass.getDetails不是函数

为什么会这样?在Javascript中,字符串也是一个对象,对吗?

2 个答案:

答案 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");