Javascript高级程序设计-对象

 

学习Javascript,最难的地方是什么?

Object(对象)最难,初学者不容易掌握。

Javascript是一种基于对象(object-based)的语言,它的语法中没有class(类)。

 

C#面向对象基础

 

1、类是数据封装的基本单位,是重复使用的最小单位。

类的成员:变量、方法、属性、事件、常数

对象是类在内存中的实体,类用于描述对象在内存中的数据。

 

2、静态方法可以不建立类的对象,即不用new实例化,而用类直接调用:类名.方法名()

Static变量通常用于配置全局共用的区块

 

3、new实例化对象后,对象将会被配置在堆积Heap中,堆栈Stack内保存的是指向堆积Heap中对象所在位置的参考指针。实例化的那个对象用于存放的是指针。

 

4、this操作数

this操作数是指向此对象的参考指针。也就是实例化后就可以使用this来存取这一对象实体。还可以用于解决名称相同的问题:this.Name=Name(参数)。this还可以用来返回目前对象的参考: this.Name=Name ;return this。

 

Javascript面向对象基础

Javascript定义类(class)的三种方法

一、构造函数

内部用this关键字指代实例对象。

function Class() {

    this.name = "名称";

}

类的属性和方法,还可以定义在构造函数的prototype对象之上,Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。

Class.prototype.pwd = function () {

    alert("密码");

}

生成实例的时候,使用new关键字。

var obj = new Class();

alert(obj.name); // 名称

alert(obj.pwd); // 密码

Prototype模式的验证方法

 

1.isPrototypeOf()

这个方法用来判断,某个proptotype对象和某个实例之间的关系。

alert(Class.prototype.isPrototypeOf(obj)); //true

 

2.hasOwnProperty()

每个实例对象都有一个hasOwnProperty()方法,用来判断某一个属性到底是本地属性,还是继承自prototype对象的属性。

alert(obj.hasOwnProperty("name")); // true

 

3.in运算符

in运算符可以用来判断,某个实例是否含有某个属性,不管是不是本地属性。

alert("name" in obj); // true

 

二、Object.create()

为了解决"构造函数法"的缺点,更方便地生成对象, Object.create()用这个方法,"类"就是一个对象,不是函数。

if (!Object.create) { //兼容各大浏览器

    Object.create = function (o) {

        function F() { }

        F.prototype = o;

        return new F();

    };

}

var Obj = {

    fn: function () {

        var o = {};

    }

};

var o = Object.create(Obj);

alert(o.fn())//名称

 

这种方法比"构造函数法"简单,但是不能实现私有属性和私有方法,实例对象之间也不能共享数据,对"类"的模拟不够全面。

 

三、不使用this和prototype,首先,它也是用一个对象模拟"类",在这个类里面,定义一个构造函数fn(),用来生成实例。

var Obj = {

    fn: function () {

        var o = {};

        o.name = "名称";

        o.pwd = function () { return "密码"; };

        return o;

    }

};

使用的时候,调用fn()方法,就可以得到实例对象。

alert(Obj.fn().name)  //名称

这种方法的好处是,容易理解,结构清晰优雅,符合传统的"面向对象编程"的构造,因此可以方便地部署下面的特性。

封装

把变量、方法、属性、事件、常数封装到一个对象里。

继承

让一个类继承另一个类,实现起来很方便。只要在前者的fn()方法中,调用后者的fn()方法即可。

 

私有属性和私有方法

在fn()方法中,只要不是定义在Obj对象上的方法和属性,都是私有的。

 

数据共享

有时候,我们需要所有实例对象,能够读写同一项内部数据。这个时候,只要把这个内部数据,封装在类对象的里面、fn()方法的外面即可。

var v1 = Obj.fn().name;

var v2 = Obj.fn().name;

alert(v1)//名称

alert(v2)//名称

本文下载

posted @ 2013-06-24 14:20  microsoftzhcn  阅读(307)  评论(0编辑  收藏  举报