是不是;t一个原型对象一个实例
Isn't a prototype object an instance?
我有一些代码无法理解
在smjs上检查了下面的代码。我不明白为什么假的回来了
原型对象不是实例吗
js> "".__proto__
(new String(""))
js> (new String("")) instanceof String
true
js> "".__proto__ instanceof String
false
这与Learning Array.prototype和计算其长度基本相同。
String.prototype
是字符串,根据规范§15.5.4,字符串原型对象的属性:
String原型对象本身就是一个String对象(其
[[Class]]
为"String"
),其值为空String。String原型对象的
[[Prototype]]
内部属性的值是标准的内置object原型对象(15.2.4)
但它不是构造函数String
的实例。
instanceof
的工作原理是将实例的原型与构造函数的prototype
属性(§15.3.5.3)进行比较,即
Object.getPrototypeOf(String.prototype) === String.prototype
因此,您正在测试String.prototype
是否是自己的原型,当然是false
。如说明书中所述,String.prototype
的原型是Object.prototype
。
关于第一个例子的一个词:
> js> "".__proto__
(new String(""))
您必须记住,控制台(或RELP)使用一些启发式方法来格式化和呈现值。例如,它可以读取对象的CCD_;种类";值,并相应地格式化输出。Chrome控制台就是这么做的:
var str = new String('foo');
str instanceof String
=> true
console.dir(str);
=> String
var obj = {};
console.dir(obj);
=> Object // looks good
obj.constructor = String;
=> console.dir(obj);
String // uhm what?
obj instanceof String
=> false
碰巧每个原型对象都有一个constructor
属性,它指向它作为原型对象的函数,即
function Foo() {}
Foo.prototype.constructor === Foo;
=> true
console.dir(Foo.prototype)
=> Foo
因此,如果您记录一个原型对象,输出可能表明该对象是函数本身的实例,尽管它不是,只是因为constructor
属性。
相关文章:
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- AngularJS&JSON-从Previous&下一个对象
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 你能用来自数组的属性名称生成一个对象吗
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- Protractor:element.getText()返回一个对象,而不是String
- 如何使用jQuery添加另一个对象的高度作为边距
- 计算从一个对象到另一个对象的路径并沿其移动
- 如何将一个对象添加到每个对象数组中
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 将javascript对象(属性+值)合并到一个对象中
- 尝试简化检查对象键是否为true并将其推送到另一个对象
- 从 javascript 中的对象方法返回一个对象
- 响应应包含一个对象,但得到的却是GET操作的数组
- js:如何制作一个循环,将20个不同的东西添加到一个对象中
- 用javascript创建另一个对象的实例