对JavaScript原型的理解

JavaScript中是没有类的概念的,有的只是原型和对象。

在说原型之前先说说JavaScript中对象的三种类型:

(1)用户创建的对象,也就是用new关键字创建出来的对象。如:

         var obj = new Object();

(2)构造函数(其实在JavaScript中任何非匿名函数都可以是构造函数)对象。如上面的Object就是个构造函数对象。

(3)原型对象。构造函数的prototype属性所指向的对象。

上面三类对象的__proto__属性所指向的对象即为该对象的原型,也对应该对象的构造函数的prototype属性。Function.prototype是所有函数的原型,Object.prototype是所有对象的祖先。因为Object是一个构造函数,所有Object.__proto__ = Function.prototype。又因为Function.prototype是一个对象(原型对象),所以Function.prototype.__proto__ = Object.prototype。而Function.__proto__ = Function.prototype。因为Object.prototype是所有对象的祖先所以有Object.prototype.__proto__ = null。另外原型对象中还有一个指向构造函数的属性constuctor。拿Function 和 Object这两个构造函数为例,它们的原型属性Function.prototype 和 Object.prototype 中都有一个constructor属性。其中Function.prototype.constructor = Function, Object.prototype.constructor = Object。

下面用一个例子来说明:

 function func(){ };

 var f = new func();

console.log( f.__proto__ == func.prototype); // true

console.log( f.__proto__.__proto__ == Object.prototype); //true

console.log( func.__proto__ == Function.prototype); // true

console.log( func.prototype.__proto__ == Object.prototype); //true

console.log( func.prototype.constructor == func); //true

console.log( Object.__proto__ == Function.prototype); //true

console.log( Object.property.__proto__ == null); //true

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容