`
zhouyrt
  • 浏览: 1159345 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

修复旧版本浏览器中的Function.prototype

阅读更多

Function.prototype的apply和call是在1999年发布的ECMA262 Edition3中才加入的(1998年发布ECMA262 Edition2)。在此前的的浏览器如IE5.01(JScript 5.0)中是没有apply和call的。因此会带来一些兼容性问题,以下是修复方式:

 

if(!Function.prototype.apply){
	Function.prototype.apply = function(obj, args){
		obj = obj == undefined ? window : Object(obj);//obj可以是js基本类型
		var i = 0, ary = [], str;
		if(args){
			for( len=args.length; i<len; i++ ){
				ary[i] = "args[" + i + "]";
			}
		}
		obj._apply = this;
		str = 'obj._apply(' + ary.join(',') + ')';
		try{
			return eval(str);
		}catch(e){
		}finally{
			delete obj._apply;
		}	
	};
}
if(!Function.prototype.call){
	Function.prototype.call = function(obj){
		var i = 1, args = [];
		for( len=arguments.length; i<len; i++ ){
			args[i-1] = arguments[i];
		}
		return this.apply(obj, args);
	};
}

 

 

 

 

分享到:
评论

相关推荐

    prototype 1.3 源码解读

    Function.prototype.bindAsEventListener = function (object) { var __method = this; return function (event) { __method.call(object, event || window.event); }; }; ``` - **`Function.prototype....

    Prototype1.5.1使用手册

    2.Function.prototype.bindAsEventListener:与bind类似,但同时确保事件处理函数的事件对象作为第一个参数传递。 五、数组操作 1.Array.prototype.each:遍历数组并执行指定函数,类似于forEach。 2.Array....

    prototype.js开发手册

    同时,了解不同版本间的差异有助于你在特定项目中选择最适合的Prototype.js版本。 总的来说,Prototype.js作为一个强大的JavaScript库,为开发者提供了许多便利。通过深入学习和实践,开发者能够提升编写高效、可...

    Prototype.js 1.6.0.3 及中文CHM帮助文档

    Prototype.js 是一个广泛使用的JavaScript库,它为JavaScript编程提供了丰富的功能和便利,旨在简化和优化在浏览器环境中进行的脚本编写。1.6.0.3 版本是该库的一个稳定版本,它包含了对先前版本的改进和修复,以...

    extjs浏览器问题

    在旧版本的IE中,由于JavaScript引擎的限制,可能会遇到解析或执行错误。 描述中提到的现象表明在Internet Explorer中,应用可能由于不兼容的语法或者其他与ExtJS有关的错误导致运行异常,而在Firefox这样的现代...

    完美解决IE低版本不支持call与apply的问题

    Function.prototype的apply和call是在1999年发布的ECMA262 Edition3中才加入...Function.prototype.apply){ Function.prototype.apply = function(obj, args){ obj = obj == undefined ? window : Object(obj);//obj可

    cezve.js:在所有对象上定义伪属性而不修改 Object.prototype

    3. **兼容性处理**:为了确保在各种环境(包括旧版本浏览器)下都能正常工作,`cezve.js` 可能会包含一些针对旧版 JavaScript 引擎的兼容性修复代码,比如使用 `try...catch` 来处理 `Object.create` 不支持的情况。...

    13、JavaScript继承实现(二) —— zInherit、xbObjects

    Parent.prototype.method = function() {}; function Child() {} createSubClass(Child, Parent); var childInstance = new Child(); childInstance.method(); // 调用父类的方法 ``` `xbObjects.js`文件...

    prototype手册

    《Prototype 1.4.js 开发者手册》是JavaScript编程领域中一本重要的参考资料,它主要聚焦于Prototype JavaScript库的版本1.4。Prototype是一个广泛使用的JavaScript框架,它为JavaScript开发提供了许多实用的功能,...

    修复在iOS12和MacOSSafari120上的ArrayReverseBug

    在JavaScript开发过程中,有时会遇到特定环境下的兼容性问题,比如在iOS 12和MacOS上Safari 12.0浏览器中的`Array.prototype.reverse()`方法可能存在bug。`Array.prototype.reverse()`是JavaScript中用于反转数组...

    prototype最新版(很好用)

    这个"prototype最新版(很好用)"的压缩包文件包含了一个名为`prototype.js`的核心文件,这通常意味着它是Prototype库的最新版本。 Prototype库的核心特性包括但不限于以下几点: 1. **对象扩展**:Prototype通过...

    前端项目-es5-shim.zip

    3. **Function.prototype.bind**: 实现了函数绑定功能。 4. **String**: 增强了字符串处理,如trim、substring等。 5. **Date**: 改进了日期处理,如ISO 8601格式的支持。 6. **JSON**: 在没有原生JSON支持的环境中...

    prototypejs

    3. **兼容性处理**:PrototypeJS对老版本浏览器做了很好的兼容,如修复了一些IE浏览器中的问题,使得在不同环境下都能稳定运行。 五、与其他库的比较 PrototypeJS与jQuery、MooTools等库相比,各有优缺点。...

    各浏览器对document.getElementById等方法的实现差异解析

    需要注意的是,`bind`方法不是所有浏览器都支持,尤其是较旧的版本。在不支持`bind`的浏览器中,可以使用`apply`的解决方案。 除了`getElementById`,其他类似的方法如`document.write`、`document.writeln`、`...

    prototype-1.4.0

    Prototype 的后续版本中,对性能进行了优化,增加了更多的功能,并修复了一些已知问题。学习和了解不同版本间的差异,有助于适应不断变化的开发需求。 综上所述,Prototype 1.4.0 是JavaScript开发中的一款重要...

    jQuery中isFunction方法的BUG修复

    然而,在早期版本中,`isFunction`函数在Internet Explorer (IE) 浏览器中存在BUG,导致它无法正确地识别一些原生DOM方法和函数如`alert`等。 在IE浏览器中,使用`typeof`检测某些方法(比如`alert`、`confirm`)...

    prototypejs和例子代码

    在标题中提到的"prototype1.4.js"和"prototype1.5.js"是PrototypeJS的两个版本,分别代表了该库在不同时间点的开发状态。 1. **PrototypeJS基础概念**: PrototypeJS由Sam Stephenson创建,它的设计目标是提升...

    使用prototype.js 的时候应该特别注意的几个问题.

    使用`$H`创建的哈希对象可能会与prototype.js中的某些方法冲突,如`inspect`和`toQueryString`。即使哈希对象中存在某个键,这些方法可能无法正确处理。因此,当使用`$H`创建的哈希对象时,需要谨慎使用这些内置...

    ES3封装工具

    Animal.prototype.sayName = function() { console.log(this.name); } function Dog(name, breed) { Animal.call(this, name); this.breed = breed; } Dog.prototype = new Animal(); // 创建原型链 Dog....

Global site tag (gtag.js) - Google Analytics