美文网首页
object 对象 及原型原型链

object 对象 及原型原型链

作者: 卢卢2020 | 来源:发表于2021-01-17 22:09 被阅读0次

    对象的定义

    满足两个条件 :

        1.无序的数据集合

        2.键值对的集合

    写法:

    let obj = {'name':'frank',’age‘:18}

    let obj = new Object({'name':'frank','age':18})

    注意细节:

    键名是字符串,不是标识符,可以任意字符

    键的引号可以省略,省略之后就只能写标识符

    ——————————重点  就算引号省略了,键名也还是字符串—————

    使用Object.keys(obj) 可以得到obj的所有key

    变量做属性名

    如何用变量做属性名

        let pp = 'name'

        let obj={pp:'frank'}  这样写 属性名为"obj”   这种方法无法得到变量名pp 只能得到字符串"pp"

        let  obj ={[pp]:'frank'}   【pp】这种方法可以得到变量pp  // name:frank

    变量做属性名

    删除属性

    delete obj.name   或者 delete obj['name']

    请区分属性值为undefined 和不含属性名

    不含属性名(查看是否含有属性名方法:'XXX' in obj === false)

    含有属性名,但是值为undefined

    "xxx" in obj && obj.xxx ===undefined

    查看属性

    查看自身所有属性

    Object.keys(obj) //查看所有的key

    Object.values(obj) //所有的value

    Object.entries(obj) //key和value值 以数组形式查看

    查看自身+共有属性 

    console.dir(obj)  推荐用法

    或者自己依次用Object.keys打印出obj.__proto__(不推荐,因为它里面的共有属性比较多)

    判断一个属性是自身的还是共有的

    obj.hasOwnProperty('toString')

    总结:'name' in obj 和obj.hasOwnProperty('name')的区别:前者为查看是否有属性名 后者是判断一个属性是自身属性还是共有属性

    修改或者添加属性

    修改属性 var obj={name:'frank' ,age:18}  修改属性直接obj.name重新赋值 写法 obj.name = 'lulu'

    添加属性 obj.wuwuwu = 'wuwuwu'

    批量添加属性 Object.assign(obj,{p1:1,p2:2,p3:3,p4:4})

    修改 添加 批量添加属性

    修改或者增加共有属性:

    比如上面的obj 我们可以通过修改它的obj.__proto__来修改原型  但是这种方法不推荐 一般推荐用另一种 window.Object.prototype 

    window.Object.prototype=obj.__proto__   //true

    对象的原型图

    本图为饥人谷教程图

    三个推理公式

    相关文章

      网友评论

          本文标题:object 对象 及原型原型链

          本文链接:https://www.haomeiwen.com/subject/twpwaktx.html