Discuss / JavaScript / 原型

原型

Topic source

最初看的时候是迷迷糊糊的。后来我用其他语言的模型参考思考了下,一切变得清晰起来。 将class类比原型对象,class有构造函数,类实例化便生成实例。实例是继承类,类又可以继承类。而一些语言中object是最顶层的类,其他类都是从object派生的。 function Foo() { return 0; } var c=new Foo(); c实例是调用Foo()构造函数生成的,我们知道一些语言实例化都是调用构造函数的,而构造函数里初始化的属性都是实例属性。 这里我们想象有个Foo对象,Foo对象的构造函数是Foo(),在一些语言中构造函数名和类名相同。c是Foo对象的实例,所以c的原型是Foo对象,Foo对象可以理解为派生Object对象,由于Object对象是最顶层,所以Object对象的proto为null. 在JavaScript中一切皆为对象,即使是函数也是对象。Foo()构造函数是个函数对象,其属性prototype指向Foo对象,我们可以将prototype理解为这个构造函数是哪一个对象的构造函数。于是就有了c.proto===Foo.prototype.他们指向同一个Foo对象。


  • 1

Reply