在JavaScript中扩展属性

时间:2010-10-13 01:15:04

标签: javascript javascript-framework

我在javascript中有这段代码:

var object = {
    get: function(id){
        sel = document.getElementById(id);
        sel.orig = {};

        ...

        return object.extend(sel, object);
    }

    extend: function(el, opt){
        for(var name in opt) el[name] = opt[name];
        return el;
    }
}

在另一个js我有

var Multi = {
    set: function(){
        if(!this.orig["height"]) this.orig["height"] = this.offsetHeight;

        ...

        return this;
    }
}

object.extend(object,Multi);

我称之为:

object.get('myId').set();

但是在“set”方法中,属性this.orig [“height”]总是未定义的,所以它总是会改变值,这不是主意,我需要第一次捕获它,因为即时尝试为了制作一个Fx框架而我用于slideUp功能,我需要保持原来的高度,所以我可以再回去。

有什么想法吗?谢谢

2 个答案:

答案 0 :(得分:0)

现在,与某些人的答案相比,评论是完全没有建设性的,我认为你的真实问题是关于这个小曲子:

  extend: function(el, opt){
        for(var name in opt) el[name] = opt[name];
        return el;
  }

为什么它返回undefined?它没有......你的问题在于其他地方,因为这有效:

var object = {
    get: function(id) {
        el = document.getElementById(id);
        el.orig = {};
        return object.extend(el,object);
    },
    extend: function( el, opt ) {
        for(var name in opt) el[name] = opt[name];
        return el;
    }   
}

var Multi = {
    set: function() {
        if(!this.orig['height']) this.orig['height'] = this.offsetHeight;
        console.log( this.orig['height'] ); // if the value of offsetHeight itself is not undefined, it is what is returned.
    }
}
object.extend(object,Multi);
object.get('myId').set();

答案 1 :(得分:0)

嘿,感谢评论和整体回答Quickredfox !!我发现了这个问题:

 get: function(id) {
    el = document.getElementById(id);
    el.orig = {};
    return object.extend(el,object);
},

我刚才改为:

 get: function(id) {
    el = document.getElementById(id);
    if(!el.orig) el.orig = {};
    return object.extend(el,object);
},

瞧!!非常感谢你的回答!