我正在尝试设置对象的原型。
但是,有时我想设置/获取字符串的原型。然而,令人惊讶的是,当我打电话时,我收到错误:
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);
答案 0 :(得分:5)
原始值没有可访问的原型。
var foo = "hello",
bar = false;
foo.prototype; // undefined
bar.prototype; // undefined
对于原始值,您有
可在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
是一个原始对象,因此如果您检查以下链接,则无法访问其原型:
你会得到一个关于你正在做什么的例子,并说它会像你一样抛出TypeError
根据文档,您可以执行以下操作:
var proto = {}; var obj = Object.create(proto); Object.getPrototypeOf(obj) === proto; // true
但是我没有看到任何可以从字符串中调用Object.getPrototypeOf
的引用。
所以你应该创建一个新的String对象:
var foo = new String('baz');