js构造函数与原型对象的区别与联系
程序员文章站
2024-03-25 20:00:28
...
建议阅读本篇之前先了解原型对象和构造函数的概念,你可以看JS链知多少?了解原型,看学好js,这些js函数概念一定要知道了解构造函数。
首先看个例子:
var ary = new Array();
js中构造函数是用来初始化对象的,所以每个对象都会有一个构造函数,上例中ary
的构造函数就是Array
。js中每个对象都会有一个constructor
属性,这个属性的值就是相应对象的构造函数。所以下面的表达式成立:
ary.constructor === Array // true
由于js中函数也是对象,所以构造函数Array
也有constructor
属性,所有的构造函数对象都是系统构造函数Function
初始化来的,所以下面的表达式也成立:
Array.constructor !== Array //true
Array.constructor === Function //true
js中每一个对象都会有一个原型对象与之对应,并且从原型对象上继承属性。由此可见上例中ary
对象的原型对象来自于构造函数Array
,在js中可以通过构造函数的prototype
属性来获得原型对象的引用,因此ary
对象的原型对象即是Array.prototype
,也即ary
对象属性继承自Array.prototype
对象。因为每个对象都继承自原型对象,所以所有的构造函数(扩展开来应该是js中所有的函数)都有prototype
属性,并且只有函数对象才有prototype
属性;以上,由于ary
对象的原型对象来自于构造函数Array
的prototype
属性,所以下面的表达式也成立:
Array.prototype.constructor === Array //true
由此可以得出的结论:
- js中函数对象都有
prototype
,constructor
属性;普通对象都有constructor
属性,没有prototype
属性,由JS链知多少?这篇文章可知,普通对象用__proto__
属性表示原型对象; - 下面的表达式都是成立的:
ary.constructor === Array //true
ary.constructor === Array.prototype.constructor //true
ary.constructor.prototype === Array.prototype //true
Array.prototype.constructor === Array //true
Array.constructor === Function //true
全文完
推荐阅读
-
java中如何去理解 类,对象(实例),方法,类变量,对象(实例)变量的区别与联系
-
js构造函数与原型对象的区别与联系
-
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
-
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
-
JS与PHP向函数传递可变参数的区别实例代码
-
理清js中数组与对象的区别-数据类型和Json格式
-
JS与PHP向函数传递可变参数的区别实例代码_php技巧
-
JS与PHP向函数传递可变参数的区别实例代码_PHP
-
前端提高篇(十二)JS进阶9函数三大特性与对象的属性
-
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)