国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

關(guān)于js中for in的缺陷淺析

2024-05-06 15:56:45
字體:
供稿:網(wǎng)友
這篇文章主要介紹了js中for in的缺陷,有需要的朋友可以參考一下

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

復(fù)制代碼 代碼如下:


var obj = { name:"jack",
      getName:function(){return this.name}
};
//輸出name,getName   
for(var atr in obj) {
    alert(atr);
}

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

如果重寫了內(nèi)置屬性呢,下面就重寫obj的toString

復(fù)制代碼 代碼如下:


var obj = {name:"jack",
      getName:function(){return this.name},
      toString:function(){return "I'm jack."}
}
for(var atr in obj) {
    alert(atr);
}

會(huì)輸出什么呢?
1、IE6/7/8 下和沒有重寫toString一樣,仍然只輸出name,getName
2、IE9/Firefox/Chrome/Opera/Safari下則輸出name,getName,toString

如果給內(nèi)置原型添加屬性/方法,那么for in時(shí)也是可遍歷的

復(fù)制代碼 代碼如下:


Object.prototype.clone = function() {}
var obj = {
    name: 'jack',
    age: 33
}
// name, age, clone
for (var n in obj) {
    alert(n)
}

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

這或許還沒什么,因?yàn)橐话悴唤ㄗh去擴(kuò)展內(nèi)置構(gòu)造器的原型,這也是Prototype.js走向沒落的原因之一。jQuery和Underscore沒有擴(kuò)展自原型,前者在jQuery對(duì)象上做文章,后者索性將所有方法都掛在下劃線上。

但有時(shí)我們?yōu)榱思嫒軪S5或后續(xù)版本,會(huì)在不支持ES5的瀏覽器上(IE6/7/8)去擴(kuò)展內(nèi)置構(gòu)造器的原型,這時(shí)for in在各瀏覽器中就不同了。如下

復(fù)制代碼 代碼如下:


if (!Function.prototype.bind) {
    Function.prototype.bind = function(scope) {
        var fn = this
        return function () {
            fn.apply(scope, arguments)
        }
    }
}
function greet(name) { 
    alert(this.greet + ', ' + name)
}
for (var n in greet) {
    alert(n)
}

IE6/7/8輸出了bind,其它瀏覽器則無。因?yàn)楝F(xiàn)代瀏覽器中bind是原生支持的,for in不到,IE6/7/8則是給Function.prototype添加了bind。

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 偏关县| 闽侯县| 来宾市| 台东市| 建德市| 根河市| 高州市| 城固县| 大埔县| 曲阜市| 苏州市| 温泉县| 龙陵县| 五大连池市| 紫云| 积石山| 新宁县| 涟源市| 民勤县| 屯昌县| 南丰县| 遂昌县| 宽甸| 连江县| 灵武市| 叙永县| 颍上县| 额敏县| 长泰县| 千阳县| 长子县| 会泽县| 大石桥市| 赫章县| 泽普县| 呼图壁县| 澜沧| 谢通门县| 扬中市| 奇台县| 双流县|