您的位置:首页 > Web前端 > JavaScript

说一点对JavaScript类机制的理解(一)---JavaScript权威指南

2018-01-04 13:18 323 查看
基本定义:

JavaScript中,类的实现是基于原型继承机制的,如果两个实例都是从同一个原型对象上继承了属性,它们就是同一个类的实例。

JavaScript中,类的所有实例对象都从同一个原型对象上继承属性,原型对象是类的核心。

如果两个对象继承自同一个原型,一般它们是由同一个构造函数创建并初始化的。

构造函数的prototye属性被用作新对象的原型,通过一个构造函数创建的所有对象都继承自一个相同的对象,它们都是同一个类的成员。

需要理解:

定义构造函数既是定义类,类名首字母要大写;构造函数是通过new关键字调用的,构造函数与普通函数调用时不尽相同的。

构造函数是用来构造新对象的,必须通过new调用,对于Range()构造函数的调用会自动使用Range.prototype作为新Range对象的原型。

重点:

构造函数和类的标识

原型对象是类的唯一标识:当且仅当两个对象继承自同一个原型对象时,它们才是属于同一个类的实例,构造函数不能作为类的标识,只有当两个构造函数的prototype属性指向同一个原型对象时,这两个构造函数创建的实例才属于同一个类的。

构造函数是类的”外在表现”,构造函数的名字通常用作类名,Range()构造函数创建Range对象,当使用instanceof来检测对象是否属于某个类时会用到构造函数,

//判断对象r是否是Range对象
r instanceof Range
instanceof实质上是检查r是否继承自Range.prototype


constructor属性

任何JavaScript函数都可以用做构造函数,调用构造函数是需要用到一个prototye属性的,每个JavaScript函数都自动拥有一个prototype属性,这个属性的值是一个对象,这个对象包含唯一一个不可枚举属性constructor,cunstructor属性的值是一个函数对象:

var F = function(){};//函数对象
var p = F.prototype;//这是F相关联的原型对象
var c = p.constructor;//这是与原型相关联的函数
c === F //=>true
对于任意函数F.prototype.constructor == F.
既然构造函数的原型中存在预先定义好的constructor属性,对象通常继承的constructor均指向它们的构造函数,构造函数是类的"公共标识"


constructor属性为对象提供了类

var o = new F();  //创建类F的一个对象

o.constructor === F //=>true,constructor属性指代这个类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript