• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > 网页制作 > JavaScript >

JS面向对象教程

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-02-06点击:
   

  Javascript是一个类C的语言,他的面向对象的东西相对于C++/Java比较奇怪,但是其的确相当的强大,在 Todd 同学的“对象的消息模型”一文中我们已经可以看到一些端倪了。这两天有个前同事总在问我Javascript面向对象的东西,所以,索性写篇文章让他看去吧,这里这篇文章主要想从一个整体的角度来说明一下Javascript的面向对象的编程。(成文比较仓促,应该有不准确或是有误的地方,请大家批评指正)

  另,这篇文章主要基于 ECMAScript 5, 旨在介绍新技术。关于兼容性的东西,请看最后一节。

  初探

  我们知道Javascript中的变量定义基本如下:

  var name = 'Chen Hao';;

  var email = 'haoel(@)hotmail.com';

  var website = 'http://coolshell.cn';

  如果要用对象来写的话,就是下面这个样子:

  var chenhao = {

  name :'Chen Hao',

  email : 'haoel(@)hotmail.com',

  website : 'http://coolshell.cn'

  };

  于是,我就可以这样访问:

  //以成员的方式

  chenhao.name;

  chenhao.email;

  chenhao.website;

  //以hash map的方式

  chenhao["name"];

  chenhao["email"];

  chenhao["website"];

  关于函数,我们知道Javascript的函数是这样的:

  var doSomething = function(){

  alert('Hello World.');

  };

  于是,我们可以这么干:

  var sayHello = function(){

  var hello = "Hello, I'm "+ this.name

  + ", my email is: " + this.email

  + ", my website is: " + this.website;

  alert(hello);

  };

  //直接赋值,这里很像C/C++的函数指针

  chenhao.Hello = sayHello;

  chenhao.Hello();

  相信这些东西都比较简单,大家都明白了。 可以看到javascript对象函数是直接声明,直接赋值,直接就用了。runtime的动态语言。

  还有一种比较规范的写法是:

  //我们可以看到, 其用function来做class。

  var Person = function(name, email, website){

  this.name = name;

  this.email = email;

  this.website = website;

  this.sayHello = function(){

  var hello = "Hello, I'm "+ this.name + ", \n" +

  "my email is: " + this.email + ", \n" +

  "my website is: " + this.website;

  alert(hello);

  };

  };

  var chenhao = new Person("Chen Hao", "haoel@hotmail.com",

  "http://coolshell.cn");

  chenhao.sayHello();

  顺便说一下,要删除对象的属性,很简单:

  delete chenhao['email']

  上面的这些例子,我们可以看到这样几点:

  ◆ Javascript的数据和成员封装很简单。没有类完全是对象操作。纯动态!

  ◆ Javascript function中的this指针很关键,如果没有的话,那就是局部变量或局部函数。

  ◆ Javascript对象成员函数可以在使用时临时声明,并把一个全局函数直接赋过去就好了。

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1978130638@qq.com ,  QQ