function Foo() {}
var f1 = new Foo(); // This is clearly an instance of Foo.
var f2 = Object.create(Foo.prototype); // Is this an instance of Foo?
显然f2 instanceof Foo
会返回true
,但我说的是更一般的面向对象意义。
最后,f1
和f2
之间有什么区别,以便Chrome在将它们打印到控制台时可以区分它们?
console.log(f1); // Foo {}
console.log(f2); // Object {}
答案 0 :(得分:1)
是否对构造函数的“实例”有严格的定义?
没有。您可以使用instanceof
的定义,即对象需要从相应的原型对象继承。但是在OOP意义上,通常也暗示对象是通过调用构造函数构造的;或者至少以某种方式实现与在构造函数中设置的接口(相同的属性)。
最后,
f1
和f2
之间有什么区别,以便Chrome在将它们打印到控制台时可以区分它们?
这是Chrome内部的东西,仅用于在控制台中进行漂亮打印(好吧,也许V8会根据这样的标签做一些其他优化)。
这两个对象与JavaScript观点无法区分。
答案 1 :(得分:0)
var f1 = new Foo(); // This is clearly an instance of Foo.
var f2 = Object.create(Foo.prototype); // Is this an instance of Foo?
目前只有Foo
个实例。
Object.create()
创建传递参数的实例。如果没有传递,它将创建对象的实例。