javascript wrapper函数
在设计javascript的继承体系时,有一个重要需求,方法链。通俗地说,说是在方法中调用父类的同名方法。类似java的this.super().method()。如何把父类的同名方法包装到子类中呢?这就要用到wrapper函数。之所以叫wrapper,而不是wrap,因为它比wrap更加wrapper。比如像Ext那种深度继承的结构中,如果父类没有找祖父,祖父没有找曾祖父,沿着原型链层层上溯,以获取它所需要的功能。此外,wrapper函数在jQuery也有应用,好像分为三种wrapAll,wrapinner,wrap,专门用来对付IE的table或其他DOM。可能还有其他用处,不管了,先看如何实现它。
一个普通的函数
var greeting = function(world){
return "hello " + world +"!";
};
alert(greeting("world"));
var greeting = function(world){
return "hello " + world +"!";
};
alert(greeting("world"));
运行代码
我们把它塞进更深一层的作用域,非bind函数。
var wrap= function(fn){
return function(){
return fn.apply(null,arguments);
};
};
var wrap= function(fn){
return function(){
return fn.apply(null,arguments);
};
};
var greeting = function(world){
return "hello " + world +"!";
};
alert(greeting("world"));
alert(wrap(greeting)("world"))
运行代码
但这只是延迟了它的执行时间而已。上面函数中的null,也可以换成window。
var wrap= function(fn){
return function(){
return fn.apply(window,arguments);
};
};
var wrap= function(fn){
return function(){
return fn.apply(window,arguments);
};
};
var greeting = function(world){
return "hello " + world +"!";
};
alert(greeting("world"));
alert(wrap(greeting)("world"))
运行代码
因为总要人去调用函数的,null没有此能力,就由window上。现在我们就是要在这个位置上做文章,把换成this。如果没有进一步的改进,这里的this还是window的替身。下面就开始复杂了,先分解一下写法,降低阅读难度,就像jQuery那样把它掰成三部分:
var wrapper= function(fn){//这里改一下名。
var temp = function(){
相关文档:
javascript的跨浏览器的问题真的很烦人,
以前做AJAX的时候都是用responseText 因为功能要求都不是很复杂
现在想做一些RSS的合整,觉得用JS来做能节省很多的服务器资源
尽量往RIA的这边靠拢吧。
因为手头上没有一份完整的DOM的文档,解析XML来真的可以说的焦头烂额,
虽然用FOR IN 能读出对象的所有属性和方法,可惜这 ......
网上很多文章都转载了一段话:对于函数来说,caller 属性只有在函数执行时才有定义。
到底是不是呢?可以用下面这段代码测试一下(这段例子也是转载文章中使用的):
function callerDemo() {
if (callerDemo.caller) {
var a= callerDemo.caller.toString();
alert(a);
} else {
......
10:33:41 2009-11-14
function checkDate() {
//取得date的值
if(!document.getElementById || !document.createTextNode()){return;}
var dateFiled = document.getElementById('date');
if(!dateFiled) {return;}
var dateValue = dateFiled.value;
var checkPattern = new RegExp("\\d{2}/\\d{2}/\\d ......
function function xx(){...} 定义函数
isNumeric 判断是否是数字
innerHTML xx=对象.innerHTML 输入某对象标签中的html源代码
innerText divid.innerText=xx 将以div定位以id命名的对象值设为XX
locati ......
注:在项目中遇到类似的问题,通过网络解决问题。
parseInt("07") 返回多少 ?
parseInt("08") 又返回多少 ?
正确答案:
parseInt("07") 返回8
parseInt("08") 返回0
用javascript的parseInt函数时,parseInt("08")或者parseInt("09")返回的居然是0,而parseInt("01")...parseInt("07")都是正确的。
为什么这样呢?
......