现在的位置: 首页 > 综合 > 正文

Prototype 框架分析(一)

2012年02月11日 ⁄ 综合 ⁄ 共 1158字 ⁄ 字号 评论关闭
文章目录

Prototype 框架分析(一)

Class

关于javascript的面向对象设计可以参看MSDN上的文章《JavaScript使用面向对象的技术创建高级 Web 应用程序》,这样理解起来更加容易。

  • Class的声明

Prototype的帮助文档中关于Class的介绍中有下面的例子:

var Animal = Class.create();

Animal.prototype = {

  initialize: function(name, sound) {

    this.name  = name;

    this.sound = sound;

  },

  speak: function() {

    alert(name + " says: " + sound + "!");

  }

};

var snake = new Animal("Ringneck", "hissssssssss");

snake.speak();

// -> alerts "Ringneck says: hissssssssss!"

//snake.name = "NewRingneck";

//snake.speak();

//如果更改了Animal的名字,它的speak方法仍然是初始化的状态。

//原因就在于js的闭包原理,所以speak方法应该为

//alert(this.name + " says: " + this.sound + "!");

这里Class.create()返回了一个函数,也就是说变量Animal是一个函数。而这个函数的功能就是调用Obj的initialize方法,从而实现类的初始化。因此每个类必须要有initialize方法。

  • Class的继承

Class的继承其实就是更改对象的prototype:

//接着上面的例子

var Dog = Class.create();

//Object.extend方法返回Animal对象,并且给这个Animal增加了

//initialize方法,而根据js运行时可以知道会覆盖先前Animal

//的initialize方法。不过这里Dog.prototype的constructor方法没有改变跟Animal.prototype一致。

//当然如果不用constructor方法也就可以忽略这一点了。

Dog.prototype = Object.extend(new Animal(), {

  initialize: function(name) {

    this.name  = name;

    this.sound = "woof";

  }  

});

var fido = new Dog("Fido");

fido.speak();

// -> alerts "Fido says: woof!"

抱歉!评论已关闭.