轻松拿下JavaScript(二)——面向对象

来源:互联网 发布:python range转list 编辑:程序博客网 时间:2024/05/11 15:16

我们接着前面的内容,来继续探讨JavaScript的面向对象的内容,今天这回我们主要学习下面几个知识点:我们一个个来进行深入浅出的讲解。

JS中的对象:

JavaScript是一种基于原型的面向对象的语言,没有类的概念,所有的一切都派生自现有对象的一个副本。

对象分为以下两类:

function对象,例如alert()函数可以使用参数改变此类对象的功能如alert(“abc”)。传什么打印出什么。

object对象,这类对象无法像function类对象那样调用,而且具有固定的功能。

为了提高使用效率,JavaScript提供了下列内置对象。

object是通用基础对象,可以使用它来创建简单的静态对象,其简写是{}。

var obj=new Object();var obj={};

Function是被所有使用参数的对象复制的对象,也是在脚本中定义函数时所创建的对象,其简写是function(){}。

var myFunction=new function(",");function myFunction(){}

Array是一种特殊的属性和方法的集合,比如使用它的length属性可以迭代操作这类对象,使用方括号加序号也可以访问它的属性。其简写是[]。

var arry=new Array();var arry=[];

String、Boolean、Number分别用来表示字符串、布尔值、数字。

除此之外还有Math、Date、RegExp及其它内置对象。


JS中继承:

继承是面向对象中重要的组成部分。当创建自己的对象时你可以扩展或继承现有对象的属性和方法。继承为重用对象提供了便捷的途径,这样你就可以把精力完全集中于新的改进代码中。

与传统的面向对象语言不同,JavaScript是基于原型的面向对象者就导致无法从一个类扩展出另一个类的底层类结构。在JS中继承是通过简单的从一个对象原型向另一个对象原型复制方法而实现的。我们看一下这个例子:

<title>继承</title><script type="text/javascript">function init(){var person={};person.getName=function(){alert("person name");};person.getAge=function(){alert("person age");};//创建另一个对象var student={};student.getStuNum=function(){alert("student stuNum");};student.getName=person.getName;person.getName=function(){alert("person1 name");};student.getAge=person.getAge;student.getName();person.getName();}window.onload=init;</script>

那么结果是这样的:

这就说明JS继承只是通过简单的从一个对象原型向另一个对象原型复制方法而实现的。

对象成员:

1、数组的两种实现方案

    顺序数组、散列数组(key,value)

2、对象=关联数组=属性包=存储体

3、只有成员访问这个操作。(JavaScript只有属性,没有方法)。我们认为恶属性其实就是一个key(属性名)和value(属性值)。看个例子:

<script type="text/javascript">function init(){alert(document.body);}window.onload=init;</script>

我们运行的结果是:


document.body在ie里边就是一个object;这就说明document.body其实就是一个对象,只不过浏览器是按照遵循的w3c标准的来应该显示的。下面我们再打印一个东西:

<script type="text/javascript">function init(){alert(document.getElementById);}window.onload=init;</script>

我们打印出来的是一个:


其实就是一个function,是那么一回事,当一个对象被传递到alert函数中时,那么所有对象都是object的实例,由于object类有一个toString的方法,也就是当一个对象在alert中被调用的时候,实际上调用的是一个toString的方法,以便获得一个字符串的表示,那么toString方法来源于基础的object的对象,那么该方法会将对象转换成一个字符串,那么这个字符串就是这个对象类型的名称,所以就出现这个结果。

window对象:我们写的大部分方法都是隶属于window对象的。在这个例子中:

function myFunction(message){alert(message);}

该方法中实际上都是全局window的对象方法。所以myFunction("aaa")等同于window.myFunction("aaa");

作用域链:我们看个例子

<title>作用域链</title><script type="text/javascript">function override(){var alert=function(message){window.alert('override'+message);};alert('alert');window.alert('window.alert');}override();alert('alert from ouside');</script></head>

我们解析一下。我们定义了一个override,然后我们定义了一个alert function。这就相当于覆盖了window本身的alert;然后我们想调用window本身的alert,那么我们就得这么写:window.alert。然后我们下面的alert其实调用的还是我们定义的function,然后我们再写window.alert的时候,用的还是window的alert。那么外面的alert的呢,也是window调用的alert。所以就出来了这么几个结果:

这些基础知识,不难,够用就可以了。


原创粉丝点击