IE8支持function.bind()方法

这个 bind 方法仅仅有在 ie10 版本号的浏览器才得到原生支持,低于该版本号的浏览器下运行时会得到一个 undefined 的错误提示。于是仅仅好再次上网 google 解决方式,功夫不负有心人,我们在 firefox 的开发站找到了解决方式,那就是添加 property 原型使得全部浏览器都能支持 bind 方法,代码例如以下:

<script type="text/javascript">
		if (!Function.prototype.bind) {
		Function.prototype.bind = function (oThis) {
		if (typeof this !== "function") {
		throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
		}
		var aArgs = Array.prototype.slice.call(arguments, 1),
		fToBind = this,
		fNOP = function () {},
		fBound = function () {
		return fToBind.apply(this instanceof fNOP && oThis
		? this
		: oThis,
		aArgs.concat(Array.prototype.slice.call(arguments)));
		};
		fNOP.prototype = this.prototype;
		fBound.prototype = new fNOP();
		return fBound;
		};
		}
	</script>

主要解决“百度地图”官网上的样例的bug,摘取例如以下代码:

<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
	<style type="text/css">
		body, html {width: 100%;height: 100%;margin:0;font-family:"微软雅黑";}
		#allmap{width:100%;height:500px;}
		p{margin-left:5px; font-size:14px;}
	</style>
	<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=39b92e64ae5622663ceceaccd8ab8eb1"></script>
	<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
	<title>给多个点加入信息窗体</title>
	<script type="text/javascript">
		if (!Function.prototype.bind) {
		Function.prototype.bind = function (oThis) {
		if (typeof this !== "function") {
		throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
		}
		var aArgs = Array.prototype.slice.call(arguments, 1),
		fToBind = this,
		fNOP = function () {},
		fBound = function () {
		return fToBind.apply(this instanceof fNOP && oThis
		? this
		: oThis,
		aArgs.concat(Array.prototype.slice.call(arguments)));
		};
		fNOP.prototype = this.prototype;
		fBound.prototype = new fNOP();
		return fBound;
		};
		}
	</script>
</head>
<body>
	<div id="allmap"></div>
	<p>点击标注点,可查看由纯文本构成的简单型信息窗体</p>
</body>
</html>
<script type="text/javascript">
	// 百度地图API功能
	map = new BMap.Map("allmap");
	map.centerAndZoom(new BMap.Point(116.417854,39.921988), 15);
	var data_info = [[116.417854,39.921988,"地址:北京市东城区王府井大街88号乐天银泰百货八层"],
					 [116.406605,39.921585,"地址:北京市东城区东华门大街"],
					 [116.412222,39.912345,"地址:北京市东城区正义路甲5号"]
					];
	var opts = {
				width : 250,     // 信息窗体宽度
				height: 80,     // 信息窗体高度
				title : "信息窗体" , // 信息窗体标题
				enableMessage:true//设置同意信息窗发送短息
			   };
	for(var i=0;i<data_info.length;i++){
		var marker = new BMap.Marker(new BMap.Point(data_info[i][0],data_info[i][1]));  // 创建标注
		var content = data_info[i][2];
		map.addOverlay(marker);               // 将标注加入到地图中
		marker.addEventListener("click",openInfo.bind(null,content));
	}
	function openInfo(content,e){
		var p = e.target;
		var point = new BMap.Point(p.getPosition().lng, p.getPosition().lat);
		var infoWindow = new BMap.InfoWindow(content,opts);  // 创建信息窗体对象
		map.openInfoWindow(infoWindow,point); //开启信息窗体
	}
</script>
时间: 2024-10-03 03:15:30

IE8支持function.bind()方法的相关文章

ES6下的Function.bind方法

在JavaScript的使用中,this的指向问题始终是一个难点.不同的调用方式,会使this指向不同的对象.而使用call,apply,bind等方式,可改变this的指向,完成一些令人惊叹的黑魔法 最近了解了一下Function对象下的bind方法,同时对JavaScript对象下this指向,call,apply等方法有了更深刻的了解 function.apply(thisArg,[argsArray]) thisArg: function函数运行时的this值 argsArray: 一个

理解JS中的call、apply、bind方法

理解JS中的call.apply.bind方法(*****************************************************************) 在JavaScript中,call.apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向. call.apply.bind方法的共同点和区别:apply . call .bind 三者都是用来改变函数的this对象的指向的:apply . call .bind 三者

浅谈JS中的call、apply、bind方法

[前言] 在JavaScript中,call.apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向. [区别] [主体] (1)call 语法: call([thisObj[,arg1[, arg2[, [,.argN]]]]]),传递的是参数列表 定义: 调用一个对象的一个方法,以另一个对象替换当前对象. 作用: call 方法可以用来代替另一个对象调用一个方法. call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj

浅析 JavaScript 中的 Function.prototype.bind() 方法

Function.prototype.bind()方法 bind() 方法的主要作用就是将函数绑定至某个对象,bind() 方法会创建一个函数,函数体内this对象的值会被绑定到传入bind() 函数的值. 例如,在 f() 函数上调用 bind() 方法并传入参数 obj ,即 f.bind(obj) ,这将返回一个新函数, 新函数会把原始的函数 f() 当做 obj 的方法来调用,就像 obj.f() 似的,当然这时 f() 函数中的 this 对象指向的是 obj . 简单使用情形一 va

JS中的call、apply、bind方法

JS中的call.apply.bind方法 一.call()和apply()方法 1.方法定义call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象. 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj.

如何在JavaScript中正确引用某个方法(bind方法的应用)

在JavaScript中,方法往往涉及到上下文,也就是this,因此往往不能直接引用,就拿最常见的console.log("info…")来说,避免书写冗长的console,直接用log("info…")代替,不假思索的会想到如下语法: 1 var log = console.log; 2 log("info…"); 很遗憾,运行报错:TypeError: Illegal invocation. 为啥呢?对于console.log("i

IE IE8 iframe的onload方法分析 IE浏览器onload事件失效

判断iframe是否加载完成的完美方法 IE 支持 iframe 的 onload 事件,不过是隐形的,需要通过 attachEvent 来注册. 第二种方法比第一种方法更完美(采用readystatechange判断),因为 readystatechange 事件相对于 load 事件有一些潜在的问题. 这里感觉说的并不是完全准确,开始给我造成了很大的困扰.看其代码才明白,真正意义上来讲IE在创建一个新的iframe时的onload方法需要使用attachEvent来绑定,而原来就存在的ifr

bind方法的一些心得

众所周知,改变this指向的一些方法包括call,apply还有bind方法,bing方法是ECMAscript5发布的,所以只能在ie9及以上浏览器支持,既然有了apply和call方法,那为何还要出bind方法呢?当然他有一些过人之处,下面听我慢慢道来: 1.bind方法能够保持参数个数: 例:   function xxx(a,b,c){ return a+b+c; } 调用bind方法 var a,b a = xxx.bind(null,1)   //bind方法第一个参数是改变这个th

Javascript中bind()方法的使用与实现

我们先来看一道题目 1 2 3 4 var write = document.write;  write("hello");  //1.以上代码有什么问题 //2.正确操作是怎样的 不能正确执行,因为write函数丢掉了上下文,此时this的指向global或window对象,导致执行时提示非法调用异常,所以我们需要改变this的指向 正确的方案就是使用 bind/call/apply来改变this指向 bind方法 1 2 var write = document.write; wr