日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

for ie无效 in js_关于js中for in的缺陷浅析

發布時間:2023/12/19 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 for ie无效 in js_关于js中for in的缺陷浅析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://www.jb51.net/article/44028.htm

for in 語句用來列舉對象的屬性(成員),如下

var obj = { name:"jack",

getName:function(){return this.name}

};//輸出name,getName

for(var atr inobj) {

alert(atr);

}

注意了嗎,沒有輸出obj的toString,valueOf等內置屬性(或稱內置成員,隱藏屬性和預定義屬性)。即for in用來列舉對象的顯示成員(自定義成員)。

如果重寫了內置屬性呢,下面就重寫obj的toString

var obj = {name:"jack",

getName:function(){return this.name},

toString:function(){return "I'm jack."}

}for(var atr inobj) {

alert(atr);

}

會輸出什么呢?

1、IE6/7/8 下和沒有重寫toString一樣,仍然只輸出name,getName

2、IE9/Firefox/Chrome/Opera/Safari下則輸出name,getName,toString

如果給內置原型添加屬性/方法,那么for in時也是可遍歷的

Object.prototype.clone =function() {}var obj ={

name:'jack',

age:33}//name, age, clone

for (var n inobj) {

alert(n)

}

給Object.prototype添加了方法clone,for in時所有瀏覽器都顯示了clone。

這或許還沒什么,因為一般不建議去擴展內置構造器的原型,這也是Prototype.js走向沒落的原因之一。jQuery和Underscore沒有擴展自原型,前者在jQuery對象上做文章,后者索性將所有方法都掛在下劃線上。

但有時我們為了兼容ES5或后續版本,會在不支持ES5的瀏覽器上(IE6/7/8)去擴展內置構造器的原型,這時for in在各瀏覽器中就不同了。如下

if (!Function.prototype.bind) {

Function.prototype.bind=function(scope) {var fn = this

returnfunction () {

fn.apply(scope, arguments)

}

}

}

function greet(name) {

alert(this.greet + ',' +name)

}for (var n ingreet) {

alert(n)

}

IE6/7/8輸出了bind,其它瀏覽器則無。因為現代瀏覽器中bind是原生支持的,for in不到,IE6/7/8則是給Function.prototype添加了bind。

總結下:在跨瀏覽器的設計中,我們不能依賴于for in來獲取對象的成員名稱,一般使用hasOwnProperty來判斷下。

總結

以上是生活随笔為你收集整理的for ie无效 in js_关于js中for in的缺陷浅析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。