JavaScript中的对象

一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:

clip_image001

一种面向对象语言需要向开发者提供四种基本能力:

  1. 封装 - 把相关的信息(无论数据或方法)存储在对象中的能力
  2. 聚集 - 把一个对象存储在另一个对象内的能力
  3. 继承 - 由另一个类(或多个类)得来类的属性和方法的能力
  4. 多态 - 编写能以多种方法运行的函数或方法的能力

ECMAScript 支持这些要求,因此JavaScript可被看做是面向对象的。

面向对象中的类与实例

每个对象都由类定义,可以把类看做对象的配方。
类不仅要定义对象的接口(interface)(开发者访问的属性和方法),
还要定义对象的内部工作(使属性和方法发挥作用的代码)。
编译器和解释程序都根据类的说明构建对象。

实例

程序使用类创建对象时,生成的对象叫作类的实例(instance)。
每个实例的行为相同,但每个实例都是独立唯一的;处理一组独立的数据。
由类创建对象实例的过程叫做实例化(instantiation)。

JavaScript中并没有正式的类。对象定义实际上是对象自身。不过JavaScript中有一种和类非常相似的东西:
对象模板:
function person(firstname,lastname,age,eyecolor){
this.firstname=firstname
this.lastname=lastname
this.age=age
this.eyecolor=eyecolor
}// 对象定义实际上是对象自身;此时内存中已经有一个person实例了
var myFather=new person("John","Adams",35,"black")//通过new 又生成了一个person实例

JavaScript中这种模板其实是一种预定义对象

JavaScript中的面向对象

Javascript中对象的定义:
在JavaScript中,对象由属性(attribute)构成,属性可以是原始值,也可以是引用值。
如果属性存放的是函数,它将被看作对象的方法(method),否则该属性被看作对象的属性(property)。

JavaScript中只能访问对象的引用
在JavaScript中,不能访问对象的物理表示,只能访问对象的引用。
每次创建对象,存储在变量中的都是该对象的引用 ,而不是对象本身。
var myFather=new person("John","Adams",35,"black")// myFather是新生成的person实例的一个引用。

JavaScript中对象的销毁
在JavaScript中,不必专门销毁对象来释放内存。当再没有对对象的引用时,称该对象被废除(dereference)了。JavaScript中的无用存储单元收集程序,会将所有废除的对象销毁。所以只要把对象的所有引用都设置为 null(oObject = null),可以强制性地废除该对象。

JavaScript中的对象,晚绑定
所谓绑定(binding),即把对象的接口与对象实例结合在一起的方法。
早绑定 (early binding)是指在实例化对象之前定义它的属性和方法,这样编译器或解释程序就能够提前转换机器代码。像c/c++,java,c#这样的强类型语言都是早绑定。
晚绑定 (late binding)指的是编译器或解释程序在运行前,不知道对象的类型。使用晚绑定,无需检查对象的类型,只需检查对象是否支持属性和方法即可。ECMAScript 中的所有变量都采用晚绑定方法。这样就允许执行大量的对象操作,而无任何惩罚。
        function test(){}
        var lateBinding = new test();
        lateBinding.test="this is a late binding test";
        document.write(lateBinding.test)

Javascript中的对象类型

JavaScript中的对象有三种:本地对象、内置对象和宿主对象

本地对象 ,独立于宿主环境的 ECMAScript 实现提供的对象。
Object (JavaScript中的所有对象都由这个对象继承而来)
Function
(JavaScript中函数实际上也是功能完整的对象)
function sayHi(sName, sMessage) {
  alert("Hello " + sName + sMessage);
}
等价于:
var sayHi
=
new Function("sName", "sMessage", "alert(/"Hello /" + sName + sMessage);");

Array , Boolean , Date , Number , String , RegExp

Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError

内置对象 ,一种特殊的本地对象,在JavaScript程序开始执行时出现。不必明确实例化内置对象,它已被实例化了。
Global Math

宿主对象 ,所有非本地对象都是宿主对象(host object),即由 ECMAScript 实现的宿主环境提供的对象。
Browser 对象 , HTML DOM 对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值