日期:2014-05-16  浏览次数:20383 次

求助:javascript“类”库的一行代码,不明白

klass.extend = function(obj){
    var extended = obj.extended;//其实还有这一句,也不是很清楚它的用意
    for (var i in obj){
        klass[i] = obj[i];
    }
    if(extended) extend(klass)//就是这句不明白
};



完全代码是:

var Class = function(){
    var klass = function(){
        this.init.apply(this, arguments);
    };
    klass.prototype.init = function(){};
     
    klass.fn = klass.prototype;
 
    klass.fn.parent = klass;
  
    klass.extend = function(obj){
        var extended = obj.extended;//其实还有这一句,也不是很清楚它的用意
        for(var i in obj){
            klass[i] = obj[i];
        }
        if (extended) extended(klass)//就是这句不明白
    };

    klass.include = function(obj){
        var included = obj.included;
        for(var i in obj){
            klass.fn[i] = obj[i];
        }
        if (included) included(klass)
    };
    return klass;
};


javascript 类库?类?属性

------解决方案--------------------
var extended = obj.extended;//其实还有这一句,也不是很清楚它的用意
extended 等于 obj.extended,可以使function 也可以是其他对象要看obj的extended的具体指向

if (extended) extended(klass)//就是这句不明白
如果extended 不是undefined 、false,0就执行extended即,执行的问题obj.extended(klass);

从字面上(class,extend)理解,这些做了部分面向对象语言的语法的工作。



这是基于原生js对js的类面向对象的模拟。
------解决方案--------------------
这好像拔赤翻译的《基于mvc的javascript富应用开发》一书中的代码。这种写法是模拟了Ruby中的
对象继承机制。在Ruby对象被继承和模块被包含是会触发事件的。从而可以实现动态代码注入的效果。
下面是一个小例子

var Class = function(){
    var klass = function(){
        this.init.apply(this, arguments);
    };
    klass.prototype.init = function(){};
      
    klass.fn = klass.prototype;
  
    klass.fn.parent = klass;
   
    klass.extend = function(obj){
        var extended = obj.extended;
        for(var i in obj){
            klass[i] =&nbs