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看,里面的确有错误。
废话少说,直接贴代码: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看,里面的确有错误。
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);
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();
我封装了一个person,然后这个person会执行某些特定的方法,我希望这些特定的方法是调用person的人传递进来的,而不是写死在person里面的,就像c#里的委托一样,或者类似callback。
person.js文件中的代码
var person = function (name) {
var name = name;
this.run = function () {
//do something
//这里执行person外部的方法
//do something
}
}
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);
谢谢你楼提供的方法 我不希望调用方法的时候把方法作为参数传进去 我希望在new以后赋值。
不知道这样可以吗?
谢谢!在线等待各位的答复。
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();
嗯,貌似这样好些。。
//onRun(name); 错误在这 没加 this
this.onRun(name);
}另外下面document也拼错了
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();