Node.js - Object.getPrototypeOf

时间:2015-06-08 20:59:41

标签: javascript node.js

我正在尝试设置对象的原型。

但是,有时我想设置/获取字符串的原型。然而,令人惊讶的是,当我打电话时,我收到错误:

var foo = 'baz';
Object.getPrototypeOf(foo);

它抛出:

TypeError: Object.getPrototypeOf called on non-object
    at Function.getPrototypeOf (native)

为什么会这样,我该如何解决它?

我希望能够设置并获取字符串的原型。奇怪的是,我可以毫无错误地做到这一点:

var myProto = {};

var foo = 'baz';
Object.setPrototypeOf(foo,myProto);

3 个答案:

答案 0 :(得分:5)

原始值没有可访问的原型。

var foo = "hello",
    bar = false;

foo.prototype; // undefined
bar.prototype; // undefined

对于原始值,您有

  • 布尔
  • 字符串
  • 未定义
  • 符号(hello es6)

可在https://developer.mozilla.org/en-US/docs/Glossary/Primitive

上找到更多信息

答案 1 :(得分:3)

在JavaScript中有7种数据类型:6种原始类型和对象。基本类型是布尔值,空值,未定义,数字,字符串和符号。

var foo = 'baz';

创建基本类型String 'baz'

var foo = new String('baz');
Object.getPrototypeOf(foo); // String

创建String类型的对象。

答案 2 :(得分:1)

您的var foo是一个原始对象,因此如果您检查以下链接,则无法访问其原型:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf

你会得到一个关于你正在做什么的例子,并说它会像你一样抛出TypeError

根据文档,您可以执行以下操作:

var proto = {};
var obj = Object.create(proto);
Object.getPrototypeOf(obj) === proto; // true

但是我没有看到任何可以从字符串中调用Object.getPrototypeOf的引用。

所以你应该创建一个新的String对象:

var foo = new String('baz');