浅析JavaScript中的类型和对象

JavaScript是基于对象的,任何元素都可以看成对象。然而,类型和对象是不同的。本文中,我们除了讨论类型和对象的一些特点之外,更重要的是研究如何写出好的并且利于重用的类型。毕竟,JavaScript这种流行的脚本语言如果能够进行良好的封装,并形成一个庞大的类型库,对于重用是非常有意义的。

网上对于prototype的文章很多,一直没明白核心的思想。最后写了很多例子代码后才明白:prototype只能用在类型上。

以下是一些关于类型和对象的例子,大家看完例子后可能更容易理解类型和对象之间的联系:


















































例子代码

说明

1

Object.prototype.Property = 1;
Object.prototype.Method = function ()

{

alert(1);

}

var obj = new Object();

alert(obj.Property);

obj.Method();

可以在类型上使用proptotype来为类型添加行为。这些行为只能在类型的实例上体现。

JS中允许的类型有Array, Boolean, Date, Enumerator, Error, Function, Number, Object, RegExp, String

2

var obj = new Object();
obj.prototype.Property = 1; //Error

//Error

obj.prototype.Method = function()

{

alert(1);

}

在实例上不能使用prototype,否则发生编译错误

3

Object.Property = 1;

Object.Method = function()

{

alert(1);

}

alert(Object.Property);

Object.Method();

可以为类型定义“静态”的属性和方法,直接在类型上调用即可

4

Object.Property = 1;

Object.Method = function()

{

alert(1);

}

var obj = new Object();

alert(obj.Property); //Error

obj.Method(); //Error

实例不能调用类型的静态属性或方法,否则发生对象未定义的错误。

5

function Aclass()

{

this.Property = 1;

this.Method = function()

{

alert(1);

}

}

var obj = new Aclass();

alert(obj.Property);

obj.Method();

这个例子演示了通常的在JavaScript中定义一个类型的方法

6

function Aclass()

{

this.Property = 1;

this.Method = function()

{

alert(1);

}

}

Aclass.prototype.Property2 = 2;

Aclass.prototype.Method2 = function

{

alert(2);

}

var obj = new Aclass();

alert(obj.Property2);

obj.Method2();

可以在外部使用prototype为自定义的类型添加属性和方法。

7

function Aclass()

{

this.Property = 1;

this.Method = function()

{

alert(1);

}

}

Aclass.prototype.Property = 2;

Aclass.prototype.Method = function

{

alert(2);

}

var obj = new Aclass();

alert(obj.Property);

obj.Method();

在外部不能通过prototype改变自定义类型的属性或方法。

该例子可以看到:调用的属性和方法仍是最初定义的结果。

8

function Aclass()

{

this.Property = 1;

this.Method = function()

{

alert(1);

}

}

var obj = new Aclass();

obj.Property = 2;

obj.Method = function()

{

alert(2);

}

alert(obj.Property);

obj.Method();

可以在对象上改变属性。(这个是肯定的)

也可以在对象上改变方法。(和普遍的面向对象的概念不同)

9

function Aclass()

{

this.Property = 1;

this.Method = function()

{

alert(1);

}

}

var obj = new Aclass();

obj.Property2 = 2;

obj.Method2 = function()

{

alert(2);

}

alert(obj.Property2);

obj.Method2();

可以在对象上增加属性或方法

10

function AClass()

{

this.Property = 1;

this.Method = function()

{

alert(1);

}

}

function AClass2()

{

this.Property2 = 2;

this.Method2 = function()

{

alert(2);

}

}

AClass2.prototype = new AClass();

var obj = new AClass2();

alert(obj.Property);

obj.Method();

alert(obj.Property2);

obj.Method2();

这个例子说明了一个类型如何从另一个类型继承。

11

function AClass()

{

this.Property = 1;

this.Method = function()

{

alert(1);

}

}

function AClass2()

{

this.Property2 = 2;

this.Method2 = function()

{

alert(2);

}

}

AClass2.prototype = new AClass();

AClass2.prototype.Property = 3;

AClass2.prototype.Method = function()

{

alert(4);

}

var obj = new AClass2();

alert(obj.Property);

obj.Method();

这个例子说明了子类如何重写父类的属性或方法。

以上例子中,关于通过类型实现重用方面,重要的有:
·例子1:JavaScript中允许添加行为的类型
·例子2:prototype使用的限制
·例子3:如何定义类型上的静态成员
·例子7:prototype在重定义类型的成员上的限制
·例子10:如何让一个类型继承于另一个类型
·例子11:如何在子类中重新定义父类的成员

JavaScript能够实现的面向对象的特征有:
·公有属性(public field)
·公有方法(public Method)
·私有属性(private field)
·私有方法(private field)
·方法重载(method overload)
·构造函数(constructor)
·事件(event)
·单一继承(single inherit)
·子类重写父类的属性或方法(override)
·静态属性或方法(static member)

(0)

相关推荐

  • javascript 基础篇3 类,回调函数,内置对象,事件处理

    复制代码 代码如下: function 类名(参数表){ this.属性; ...... this.函数; } 这样,函数和数据成员都是用"this."来实现. 我们自己定义一个简单类student好了,然后再去构造它,并且实现一个输出函数. 复制代码 代码如下: <script LANGUAGE="JavaScript"> <!-- function student(a,b){ this.name = a; this.age=b; this.ou

  • 关于JavaScript定义类和对象的几种方式

    可以看看这个例子: 复制代码 代码如下: var a = 'global'; (function () { alert(a); var a = 'local'; })(); 大家第一眼看到这个例子觉得输出结果是什么?'global'?还是'local'?其实都不是,输出的是undefined,不用迷惑,我的题外话就是为了讲这个东西的. 其实很简单,看一看JavaScript运行机制就会明白.我们可以把这种现象看做"预声明".但是如果稍微深究一下,会明白得更透彻. 这里其实涉及到对象属性

  • JavaScript 类型的包装对象(Typed Wrappers)

    例如: new Boolean(false) 会返回一个对象,该对象有一个 valueOf 方法会返回被包装的值.这其实完全没有必要,并且有时还令人困惑.不要使用 new Boolean. new Number 或 new String. 此外也请避免使用 new Object 和 new Array.可使用 {} 和 [] 来代替. --------------------------------------------------------------------------------

  • JavaScript高级程序设计 阅读笔记(十三) js定义类或对象

    工厂方式 创建并返回特定类型的对象. 复制代码 代码如下: function createCar(sColor,iDoors,iMpg){ var oTempCar=new Object(); oTempCar.color=sColor; oTempCar.doors=iDoors; oTempCar.mpg=iMpg; oTempCar.showColor=function(){ alert(this.color); } return oTempCar; } 调用示例: 复制代码 代码如下:

  • 浅析JavaScript中两种类型的全局对象/函数

    这里所说的JavaScript指浏览器环境中的包括宿主环境在内的.第一种是ECMAScript Global Object,第二种是宿主环境(Host)下的全局对象/函数. 一.核心JavaScript内置对象,即ECMAScript实现提供的不依赖于宿主环境的对象 这些对象在程序执行之前就已经(实例化)存在了.ECMAScript称为The Global Object,分为以下几种 1, 值属性的全局对象(Value Properties of the Global Object).有NaN,

  • javascript 面向对象 function类

    如下: 复制代码 代码如下: function Student() { //定义类Student中的字段,并赋予初值,但此字段的访问权限是public this.studentNo = 's001'; this.studentName = '小明'; this.sex = '男'; //定义类Student中的方法updateStudentName ,用于修改studentName 值 this.updateStudentName = function(studentName) { this.s

  • javascript中怎么做对象的类型判断

    最近在翻看John Resig的大作<Pro JavaScript Techniques>,里面讲到了如何做javascript的类型判断的问题.文中介绍了两种方式,一种是使用typeof,另一种是使用constructor.略感遗憾的是作为jquery的作者,他尽然没有介绍jquery使用的类型判断方式.不过没有关系,我在这里给大家一起总结下. 在这里我首先像大家推荐一个很好用的在线编辑器:http://jsfiddle.net/.他提供了jquery.mootools.prototype和

  • JavaScript中判断对象类型的几种方法总结

    我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一个说明运算数类型的字符串.如:"number","string","boolean","object","function","undefined"(可用于判断变量是否存在). 但 type

  • JavaScript定义类和对象的方法

    本文实例讲述了JavaScript定义类和对象的方法.分享给大家供大家参考.具体方法如下: 在JS中,类和对象有多种不同的写法,因为本人对JS也不怎么熟,所以就本人的理解来写,如果哪位朋友发现有不对,请告之,共同学习. JS定义一个类有两种定法(我只知道这两种): 1. 定义函数的方式: 定义: 复制代码 代码如下: function classA(a) {      this.aaa=a;  //添加一个属性      this.methodA=function(ppp)  //添加一个方法

  • JavaScript中创建类/对象的几种方法总结

    在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活的. JS对象是一种复合类型,它允许你通过变量名存储和访问,换一种思路,对象是一个无序的属性集合,集合中的每一项都由名称和值组成(听起来是不是很像我们常听说的HASH表.字典.健/值对?),而其中的值类型可能是内置类型(如number,string),也可能是对象. 一.由一对大括号括起来 复制代码 代码如下: var emptyObj = {

  • JavaScript创建类/对象的几种方式概述及实例

    在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活的. JS对象是一种复合类型,它允许你通过变量名存储和访问,换一种思路,对象是一个无序的属性集合,集合中的每一项都由名称和值组成(听起来是不是很像我们常听说的HASH表.字典.健/值对?),而其中的值类型可能是内置类型(如number,string),也可能是对象. 一.由一对大括号括起来 复制代码 代码如下: var emptyObj = {

  • Javascript delete 引用类型对象

    如下面例子: 复制代码 代码如下: var testVar = {            a : {                test : 1            }        },            test1 = {},            test2 = {}; test1.a = testVar.a;        test2.a = testVar.a;/*        delete test1.a;        console.log(test1.a); //

随机推荐