首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript类防御

Javascript类防御
EN

Stack Overflow用户
提问于 2010-08-17 06:01:53
回答 2查看 66关注 0票数 1

myClass函数返回单个字符串"hii“时,testClass.getDetails()工作得很好:

代码语言:javascript
运行
复制
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中返回一个对象时

代码语言:javascript
运行
复制
function myClass(name, age) {
    this.name = name;
    this.age = age;
    return {};
}

我收到一个错误:

testClass.getDetails不是一个函数

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-17 06:07:32

不,与您要返回的字符串("hii")类似的字符串文本是原语值不是对象。

在JavaScript中,我们有以下原语:字符串、数字、布尔值、未定义的和空的。

如果与new运算符一起使用的构造函数返回原语,则将返回this值。

如果返回一个对象,如您的第二个示例( IMO并不真正有用),新创建的对象(构造函数中的this)将丢失,并且您将得到一个错误,因为它不包含名为getDetails的属性。

例如:

代码语言:javascript
运行
复制
function Test () {
  // don't return anything (equivalent to returning undefined)
}

new Test() instanceof Test; // true

function Test2 () {
  return {};
}

new Test2 instanceof Test2; // false
票数 0
EN

Stack Overflow用户

发布于 2010-08-17 06:08:04

这是因为构造函数:

如果没有手动返回,则specified

  • return自动返回新的this对象,如果手动返回,则另一个对象是

但是,您不能从对象手动返回原语值,例如原始字符串、数字或布尔值。您可以通过对象包装这个值来解决这个问题,以便它实际上是一个字符串对象:

代码语言:javascript
运行
复制
return new String("hii");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3499703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档