有没有办法迭代javascript对象的原型变量和函数?

时间:2012-10-29 05:28:45

标签: javascript-objects javascript

这个问题不再适用于我正在尝试做的事情,因为我必须使用名称声明pmp对象的名称。

我希望能够将一个对象与我的类的每个原型函数相关联,而无需为每个原型手动完成。 我已经尝试用以下方法查看原型中的内容,但无济于事

myclass.prototype.length == undefined;
myclass.prototype.toString() == [object Object];
myclass.prototype == [object Object];

这是我的代码。在以下几行中:

this.appear = _pmp(k8rModal.prototype._appear);
this.centerSlate = _pmp(k8rModal.prototype._centerSlate);
this.adjustToScreenResize = _pmp(k8rModal.prototype._adjustToScreenResize);

我运行一个名为'_pmp'的函数,它创建一个出现的PreMainPost对象,centerSlate& adjustToScreenResize将参考。这些对象有一个.run()函数,它首先运行pre()函数,然后运行main()函数,该函数由构造函数参数定义,最后运行post()函数。

这是所有背景: k8r-modal.js

function k8rModal(DOMnamespace){
var _ = this._ = DOMnamespace+"_"; // for DOM namespacing

this.tightWrap=1;
this.visible = 0;

$('body').prepend('<div id="'+_+'stage"></div>');
this.stage = stage = $('#'+_+'stage');
stage.css({
    'display':'none',
    'width':'100%',
    'height':'100%',
    'position': 'fixed',
    'left':'0px',
    'top':'0px',
    'opacity': '.6',
    'background-color':'#333'
});

$('body').append('<div id="'+_+'slate"></div>');
this.slate = slate = $('#'+_+'slate');
slate.css({
    'display':'none',
    'width':'640px',
    'height':'480px',
    'position': 'fixed',
    'left':'0px',
    'top':'0px',
    'background-color':'#eee'
});

var k8rModalInstance = this;
$('.'+_+'caller').on('click',function(){
    k8rModalInstance.appear.run();
});

this.appear = _pmp(k8rModal.prototype._appear);
this.centerSlate = _pmp(k8rModal.prototype._centerSlate);
this.adjustToScreenResize = _pmp(k8rModal.prototype._adjustToScreenResize);

this.centerSlate.run();
this.word="asdf";
$(window).resize(function(){
    alert(k8rModalInstance.word)
  k8rModalInstance.adjustToScreenResize.run();
});
}

k8rModal.prototype._appear = function(){
this.that.visible = 1;
this.that.slate.show();
this.that.stage.show();
}

k8rModal.prototype._centerSlate = function(){
var wWidth, wHeight, slate = $(this.that.slate) ;

wWidth = $(window).width();
wHeight = $(window).height();

slate.css({
    top: (wHeight/2 - ( slate.height()/2))+"px",
    left: ( wWidth/2 - ( slate.width()/2 ) )+"px"
});
}

k8rModal.prototype._adjustToScreenResize = function(){
this.that.centerSlate.run();

}

(pre-main-post.js)pmp.js:

function _pmp(func){
return new pmp(this,func);
}

function pmp(that,func){
var func;
this.pre = new funcList();
this.post = new funcList();
this.main = func;
this.that = that;
}

pmp.prototype.run = function(arg){
this.pre.run(arg);
this.post.run(arg,this.main());
}

pmp.prototype.trim = function(){
this.pre = new funcList();
this.post = new funcList();
}

(包含函数列表的对象)funcList.js:

function funcList(){
this.unique; // if a function can be 
this.list=[];
}

funcList.prototype.add = function(func){
if (this.unique){
    var passing = 1;
    for(var i; i<this.list.length; i+=1){
        if (list[i].toString == func.toString){
            passing = 0;
        }
    }
    if (passing){
        this.list.push(func);   
    }
}else{
    this.list.push(func);
}
}

funcList.prototype.remove = function(func){
for(var i; i<this.list.length; i+=1){
    if (list[i].toString == func.toString){
        this.list.splice(i,1);
    }
}
}

funcList.prototype.clear = function(){
this.list = [];
}

funcList.prototype.run = function(arg){
for(var i; i<this.list.length; i+=1){
    (this.list[i])(arg);
}
}

1 个答案:

答案 0 :(得分:1)

您只能访问本机和函数的原型。如果myClass是一个函数,你可以使用

迭代它的原型
for(var prop in myClass.prototype){
    console.log(myClass.prototype[prop]);
}