国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

object in javascript

geekzhou / 2497人閱讀

摘要:枚舉對(duì)象屬性列舉的可枚舉屬性,包括自身和原型鏈上的只列舉對(duì)象本身的可枚舉屬性創(chuàng)建對(duì)象的幾種方式對(duì)象字面量通過構(gòu)造函數(shù)以指定的對(duì)象作為原型來創(chuàng)建對(duì)象這樣,的原型就是了如何判斷對(duì)象是否是空對(duì)象對(duì)象屬性的描述符屬性的描述符分描述符和訪問描述符,對(duì)

枚舉對(duì)象屬性

for....in

列舉obj的可枚舉屬性,包括自身和原型鏈上的

object.keys()

只列舉對(duì)象本身的可枚舉屬性

創(chuàng)建對(duì)象的幾種方式

對(duì)象字面量

    const pre="test"
    const obj= {
        "name":"luyun",
        [pre+"prop"]:"wu shuang lian quan"
    }

通過構(gòu)造函數(shù)

    const obj= new Object()
    const d = new Date()

Object.create()

以指定的對(duì)象作為原型來創(chuàng)建對(duì)象

var Animal = {
  type: "Invertebrates", // Default value of properties
  displayType: function() {  // Method which will display type of Animal
    console.log(this.type);
  }
};
var animal1 = Object.create(Animal);
//這樣,animal1的原型就是Animal了

如何判斷對(duì)象是否是空對(duì)象

    typeof {} == "object"

    Object.keys({}).length===0

對(duì)象屬性的描述符

屬性的描述符分data描述符和訪問描述符,對(duì)一個(gè)屬性來說,只能存在一種描述符,configurable、enumerable是公共的。

    const users={
        a:"luyun"
    }
    Object.getOwnPropertyDescriptor( users, "a" );

    //數(shù)據(jù)描述符
    // {
    //      value: 2,
    //      writable: true,
    //      enumerable: true,
    //      configurable: true
    // }

writeable 是否可以修改

enumable 是否可枚舉,出現(xiàn)在 for in 中

configurable 是否可通過defineProperty()來修改描述符,為false時(shí),屬性不能刪除

Getter、Setter

當(dāng)你給一個(gè)屬性定義getter、setter或者兩者都有時(shí),這個(gè)屬性會(huì)被定義為“訪問描述符”(和“數(shù)據(jù)描
述符”相對(duì))

 const users={
     "name":"luyun"
 }

Object.defineProperty(users,"kongfu",{
    get:function(){
        return "正十七"
    },
    enumerable:true
})

簡(jiǎn)單模擬基于數(shù)據(jù)劫持的數(shù)據(jù)綁定

思考:

劫持的數(shù)據(jù)是用來綁定到模板上的 | {{ }} ng-bind

怎么綁定,定義watcher監(jiān)聽表達(dá)式值的變化,渲染dom

數(shù)據(jù)變了,怎么通知watcher更新模 | setter劫持

誰來通知watcher | 發(fā)布訂閱模式

首先封裝Object.defineProperty監(jiān)聽屬性的變化

function observe(data) {
    const keys = Object.keys(data)
    keys.forEach(key => {
        gs(data, key, data[key])
    })
}

//劫持?jǐn)?shù)據(jù)
function gs(obj, key, val) {
    let originVal = val
    const subpub = new Subpub()
    Object.defineProperty(obj, key, {
        configurable: true,
        enumerable: true,
        get() {
            //這里應(yīng)該確定訂閱者是誰
            Subpub.target && subpub.addWatcher()
            return originVal
        },
        set(value) {
            originVal = value
            //訂閱了當(dāng)前屬性的都要更新
            subpub.notice()
        }
    })
}

發(fā)布訂閱,需要知道哪些地方用到了當(dāng)前屬性的值,在屬性值變化時(shí),要更新這些地方

function Subpub() {
    this.subList = [] //保存訂閱某個(gè)屬性的訂閱者
}
Subpub.prototype.addSub = function (watcher) {
    this.subList.push(watcher)
}
//通知訂閱者們,數(shù)據(jù)變化了,你們要各自行動(dòng)了
Subpub.prototype.notice = function () {
    this.subList.forEach(item => {
        item.render()
    })
}

Subpub.prototype.addWatcher = function () {
    Subpub.target.addSubpub(this)
}
function Watcher(exp, fn) {
    Subpub.target = this
    this.exp = exp
    //監(jiān)聽的屬性的初始值
    this.value = user[exp] //這里寫死的user,應(yīng)該是當(dāng)前環(huán)境下的數(shù)據(jù),比如angular中$scope
    this.fn = fn
    Subpub.target = null
}
Watcher.prototype.render = function () {
    const oldValue = this.value
    const newValue = user[this.exp]
    this.fn(newValue, oldValue)
}
Watcher.prototype.addSubpub = function (subpub) {
    subpub.addSub(this)
}
const user = {
    name: "初始的盧云",
    kongfu: "無"
}

observe(user)

//這里只是簡(jiǎn)單的打印新值
new Watcher("name", function (newVal,old) {
    console.log(old)
    console.log(newVal)
})
new Watcher("kongfu", function (newVal) {
    console.log(newVal)
})

user.name = "后來的盧云"
user.kongfu=["無雙連拳","正十七", "無絕心法"]

//設(shè)置name,kongfu后的輸出:
 >   初始的盧云
     后來的盧云
     [ "無雙連拳", "正十七", "無絕心法" ]
    

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/88593.html

相關(guān)文章

  • Javascript Objects - Javascript語法基礎(chǔ) - Javascript核心

    摘要:創(chuàng)建對(duì)象對(duì)象直接量構(gòu)造函數(shù)原型繼承類繼承對(duì)象擁有自有屬性和繼承屬性。遍歷順序是以廣度優(yōu)先遍歷所以使用便可以判斷是否是對(duì)象自有的屬性。可執(zhí)行對(duì)象通過如下方法可以創(chuàng)建一個(gè)可執(zhí)行對(duì)象既可以當(dāng)作對(duì)象來使用有原型鏈,也可以當(dāng)作函數(shù)來直接調(diào)用 原文: http://pij.robinqu.me/Javascript_Core/Javascript_Basics/Objects.html ...

    wzyplus 評(píng)論0 收藏0
  • Learning Notes - Understanding the Weird Parts of

    摘要:標(biāo)簽前端作者更多文章個(gè)人網(wǎng)站 Learning Notes - Understanding the Weird Parts of JavaScript 標(biāo)簽 : 前端 JavaScript [TOC] The learning notes of the MOOC JavaScript: Understanding the Weird Parts on Udemy,including...

    inapt 評(píng)論0 收藏0
  • 關(guān)于JavaScript對(duì)象,你所不知道的事(二)- 再說屬性

    摘要:但好在還給我們提供了一個(gè)方法,每一個(gè)對(duì)象都有這樣一個(gè)方法,專門用來判斷某個(gè)屬性是否是該對(duì)象的私有屬性。如果你想要用對(duì)象字面形式,你只能在創(chuàng)建對(duì)象時(shí)定義訪問器屬性。在中,我們使用凍結(jié)一個(gè)對(duì)象,并且使用來判斷一個(gè)對(duì)象是否被凍結(jié)。 說完了對(duì)象那些不常用的冷知識(shí),是時(shí)候來看看JavaScript中對(duì)象屬性有哪些有意思的東西了。 不出你所料,對(duì)象屬性自然也有其相應(yīng)的特征屬性,但是這個(gè)話題有點(diǎn)復(fù)雜...

    Richard_Gao 評(píng)論0 收藏0
  • JS淬煉: Array進(jìn)階

    摘要:的這種實(shí)現(xiàn)方式導(dǎo)致了一些尷尬問題,比如刪除元素元素遍歷。后面的參數(shù)被忽略掉了,表示并沒有要插入的元素。其實(shí),的本質(zhì)是跟蹤中的,并始終保持值是。這時(shí)候,雖然不大可能,可能會(huì)在中間某個(gè)中被用戶重新定義。但是在上進(jìn)行這種操作是很糟糕的。 在Javascript中,array是一個(gè)類數(shù)組的object。顧名思義,它能夠在一個(gè)變量上存儲(chǔ)多個(gè)值。 數(shù)組是值的有序集合。每個(gè)值叫做一個(gè)元素,而每個(gè)元素...

    jimhs 評(píng)論0 收藏0
  • JS基礎(chǔ)05「對(duì)象」

    摘要:對(duì)象是的數(shù)據(jù)類型。對(duì)象是動(dòng)態(tài)的,可以隨時(shí)新增和刪除自有屬性。客戶端中表示網(wǎng)頁結(jié)構(gòu)的對(duì)象均是宿主對(duì)象。提供第二個(gè)可選參數(shù),用以對(duì)對(duì)象的屬性進(jìn)行進(jìn)一步描述。沒有原型的對(duì)象為數(shù)不多,就是其中之一。運(yùn)算符的左側(cè)是屬性名字符串,右側(cè)是對(duì)象。 對(duì)象是 JavaScript 的數(shù)據(jù)類型。它將很多值(原始值或者其他對(duì)象)聚合在一起,可通過名字訪問這些值,因此我們可以把它看成是從字符串到值的映射。對(duì)象是...

    frolc 評(píng)論0 收藏0
  • JavaScript 闖關(guān)記》之對(duì)象

    摘要:屬性名可以是包含空字符串在內(nèi)的任意字符串,但對(duì)象中不能存在兩個(gè)同名的屬性。客戶端中表示網(wǎng)頁結(jié)構(gòu)的對(duì)象均是宿主對(duì)象。這里的函數(shù)稱做構(gòu)造函數(shù),構(gòu)造函數(shù)用以初始化一個(gè)新創(chuàng)建的對(duì)象。通過關(guān)鍵字和構(gòu)造函數(shù)調(diào)用創(chuàng)建的對(duì)象的原型就是構(gòu)造函數(shù)的屬性的值。 對(duì)象是 JavaScript 的數(shù)據(jù)類型。它將很多值(原始值或者其他對(duì)象)聚合在一起,可通過名字訪問這些值,因此我們可以把它看成是從字符串到值的映射...

    rozbo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<