Prototype 框架分析(一)
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!"
轉載于:https://www.cnblogs.com/laolaowhn/archive/2008/02/23/1078726.html
總結
以上是生活随笔為你收集整理的Prototype 框架分析(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米手机又一项隐藏功能 小米手机隐藏功能
- 下一篇: 如何从新开发的程序中提炼服务