对"实例"是否有严格的定义?一个构造函数?

时间:2015-02-01 13:32:52

标签: javascript

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,但我说的是更一般的面向对象意义。

最后,f1f2之间有什么区别,以便Chrome在将它们打印到控制台时可以区分它们?

console.log(f1); //  Foo {}
console.log(f2); //  Object {}

2 个答案:

答案 0 :(得分:1)

  

是否对构造函数的“实例”有严格的定义?

没有。您可以使用instanceof的定义,即对象需要从相应的原型对象继承。但是在OOP意义上,通常也暗示对象是通过调用构造函数构造的;或者至少以某种方式实现与在构造函数中设置的接口(相同的属性)。

  

最后,f1f2之间有什么区别,以便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()创建传递参数的实例。如果没有传递,它将创建对象的实例。