js封装,类似java、c#中的事件委托。写出来测试不正确,急求大师们来指导一下。
废话少说,直接贴代码:person.js文件中的代码
var person = function (name) {
    var name = name;
    this.onRun;
    this.run = function () {
        onRun(name);
    }
}<html>
<head>
    <script type="text/javascript" src="jquery-1.7.2.min.js"></script>
    <script type="text/javascript" src="person.js"></script>
<script type="text/javascript">
    function run(name) {
        alert(name + "在奔跑");
    }
    var person;
    $(documen).ready(function () {
        person = new person("刘德华");
        person.onRun = run;  //这里绑定事件方法,应该这么说
        person.run();   //这里会触发事件
    });
</script>
</head>
<body>
<div>test page</div>
</body>
</html>我是想在person的run方法里执行的操作由调用person的人传递进来,而不是直接在person里面写。按照我的需求,上面的代码应该alert出来"刘德华在跑步"。但是很遗憾,没有弹出来。用chrome看,里面的确有错误。

解决方案 »

  1.   

    var person = function (name) {
        this.name = name;
        this.onRun = function(){};
        this.run = function(){this.onRun(name)}
    }function run(name) {
        alert(name + "在奔跑");
    }var person = new person("刘德华");
    person.onRun = run;
    person.run(person.name); 
      

  2.   

    BTW:貌似java、c#中也不是那样干的吧^O^
      

  3.   

    有错,更正:var person = function (name) {
        this.name = name;
        this.onRun = function(){};
        this.run = function(){this.onRun(this.name)}
    }function run(name) {
        alert(name + "在奔跑");
    }var person = new person("刘德华");
    person.onRun = run;
    person.run(); 
      

  4.   

    你没明白我的意思 我再换个说法
    我封装了一个person,然后这个person会执行某些特定的方法,我希望这些特定的方法是调用person的人传递进来的,而不是写死在person里面的,就像c#里的委托一样,或者类似callback。
    person.js文件中的代码
    var person = function (name) {
        var name = name;
        this.run = function () {
            //do something
            //这里执行person外部的方法
            //do something
        }
    }
      

  5.   

    把方法传递进去就行:var person = function (name) {
        this.name = name;
        this.run = function(method){method.apply(this)}
    }var person = new person("刘德华");
    person.run(function(name) {
        alert(this.name + "在奔跑");
    }); 当然可以:
    var person = function (name) {
        this.name = name;
        this.run = function(method){method.apply(this)}
    }function run(name) {
        alert(this.name + "在奔跑");
    }var person = new person("刘德华");
    person.run(run); 
      

  6.   

    to prototyper:
    谢谢你楼提供的方法 我不希望调用方法的时候把方法作为参数传进去 我希望在new以后赋值。
    不知道这样可以吗?
    谢谢!在线等待各位的答复。
      

  7.   

    这不更简单吗?var person = function (name) {
        this.name = name;
        this.onRun = function() {};
        this.run = function(){ this.onRun() }
    }function run(name) {
        alert(this.name + "在奔跑");
    }var person = new person("刘德华");
    person.onRun = run;
    person.run(); 
    嗯,貌似这样好些。。
      

  8.   

        this.run = function () {
            //onRun(name);   错误在这 没加 this
            this.onRun(name);
        }另外下面document也拼错了
      

  9.   


    var person = function (name) {
        this.name = name;
        this.onRun = function() {};
        this.run = function(){ this.onRun() }
    }function runX(name) {
        alert(this.name + "在奔跑");
    }
    function runY(name) {
        alert(this.name + "在睡觉");
    }var personQ = new person("刘德华");
    personQ.onRun = runX;
    personQ.run(); 
    personQ.onRun = runY;
    personQ.run(); var personR = new person("周星驰");
    personR.onRun = runX;
    personR.run(); 
    personR.onRun = runY;
    personR.run();