JavaScript 高级程序设计 对象基础

本文深入讲解JavaScript的基础组成:ECMAScript、DOM与BOM,并探讨了JavaScript中的原始类型及多种对象创建方式,包括构造函数、原型继承等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 一个完整的JavaScript实现的3个不同组成部分

    核心(ECMAScript)

    文档对象模型(DOM)

    浏览器对象模型(BOM)

 

2. ECMAScript可以为不同种类的宿主环境提供核心的脚本编程能力,是与任何特定的宿主环境分开进行规定的。

    个人理解:跨浏览器

    ECMAScript 仅仅是一个描述,定义了脚本语言的所有属性、方法和对象。其他的语言可以实现ECMAScript来作为

功能的基准。每个浏览器都有它自己的ECMAScript接口的实现。

 

3. DOM是HTML和XML的应用程序接口API。DOM将整个页面规划成由节点层级构成的文档。

DOM通过创建树来表示文档,从而使开发者对文档的内容和结构具有空前的控制力。用DOM API可以轻松的删除、添加和替换节点。

 

4. BOM可以对浏览器窗口进行访问和操作。开发者可以移动窗口。改变状态栏中的文字以及执行其他与页面内容不直接相关的内容。

 

5.ECMAScript的5种原始类型:

   Undefined   变量未初始化 或 未声明的变量 或 函数没有返回值

   Null             undefined实际上是从值null派生来的    null ==undefined  为true

   Boolean      

 

6. 不能文的规约: 用单下划线说明私有成员  例如obj._color 

7. 关键字总是指向调用该方法的对象。

 

function showColor()

                {

                    alert(this.color);

                }

 

                var oCar=new Object;

                oCar.color="red"; 相当于增加一个public的成员变量

                oCar.shoColor=showColor;     相当于增加一个public的成员函数

 

                var oCar2=new Object;

                oCar2.color="blue";

                oCar2.shoColor=showColor;

 

                oCar.shoColor();

                oCar2.shoColor();

 

8.  构造函数的方式    

 

function Car(sColor,iDoors,iMpg){

                    this.color=sColor;

                    this.doors=iDoors;

                    this.mpg=iMpg;

                    this.showColor=function (){

                        alert(this.color);

                    }

                }

 

                var car1= new Car("red",4,23);

                var car2= new Car("blue",3,25);

                car1.showColor();

                car2.showColor();

构造函数内部无创建对象。使用new运算符调用构造函数时,在执行第一行代码前先创建一个对象,只有用this才能访问该对象,然后直接赋予this属性,默认情况下是构造函数的返回值。不必明确使用return运算符。

缺陷:为每个对象创建独立的函数版本。

 

9. 原型方式

 

function Car()

                {

 

                }

                Car.prototype.color="red";

                Car.prototype.doors=4;

                Car.prototype.mpg=23;

                Car.prototype.showColor=function (){

                    alert(this.color);

                }

 

                var car1=new Car();

                car1.showColor();

                var car2=new Car();

                car2.showColor();

缺陷:构造函数没有参数。当属性指向的是对象,而不是函数是,改变对象,另一个也会受影响

 

10. 混合的构造函数/原型方式

 

 function Car(sColor,iDoors,iMpg)

                {

                    this.color=sColor;

                    this.doors=iDoors;

                    this.mpg=iMpg;

                    this.drivers= new Array("Mike","Sue");

                }               

                Car.prototype.showColor=function (){

                    alert(this.color);

                }

 

                var car1= new Car("red",4,23);

                var car2= new Car("blue",3,25);

                car1.drivers.push("Matt");

                alert(car1.drivers);

                alert(car2.drivers);

用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性。则所有对象只创建一次,而每个对象都具有自己的对象属性实例。

缺陷:在构造函数内找属性,在构造函数外找方法的做法不合理

 

11. 动态原型方法

 

function Car(sColor,iDoors,iMpg)

                {

                    this.color=sColor;

                    this.doors=iDoors;

                    this.mpg=iMpg;

                    this.drivers= new Array("Mike","Sue");

 

                    if(typeof Car._initialized=="undefined"){

                        Car.prototype.showColor=function (){

                            alert(this.color);

                        }

                        Car._initialized=true;

                    }

                } 

 

12. 可以用prototype属性为任何已有的类定义新方法,就像处理自己的类一样。

      如果想给每个本地对象添加新方法,必须在Object对象的prototype属性上定义它。

      Object.prototype.showValue=function (){

              alert(this.valueOf());                           

      }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值