简介 目录 评价 推荐
  • weixin_慕侠6270551 2022-03-14

    get/set方法

    get+属性名+函数体(获得时调用此函数),

    set+属性名+函数体(赋值时调用)

    object.create(x)方法会返回一个对象y,y的属性基于x的属性

    0赞 · 0采集
  • weixin_慕函数6407881 2021-03-01

    //读写对象的属性

    undefined

    //1、属性读写

    undefined

    var obj = {x:2,y:3}

    undefined

    obj.x

    2

    //下面是属性继承和属性枚举的知识,首先是关于属性继承要求是你在创建的时候就要说明的,比如说是

    undefined

    //上面是两种的方式

    undefined

    //当然也可以for in 去遍历,但是问题就是会把原型链上的也弄出来,而且顺序不一定

    undefined

    //还可以用hasOwnProperty

    undefined

    //这集讲的是关于get和set的方法

    undefined

    //上集由于脑袋问题没有录上,气死了

    undefined

    var man = {name:'Boso',weibo:'@Bosn',get age(){return new Date().getFullYear()-2000;},set age(val){console.log('Age can\'t be set to'+val);}}

    undefined

    console.log(man.age)

    VM7522:1 21

    undefined

    man.age

    21

    man.age = 100

    VM7469:1 Age can't be set to100

    100

    //这个里面就是有一个get和set进行赋值

    undefined

    //下面是一种更加高级的做法

    undefined

    var man = {

        weibo:'@Bosn',


    }

    undefined

    6006:1 Uncaught (in promise) DOMException: The play() request was interrupted by a call to pause(). https://goo.gl/LdLk22

    var man = {

        weibo:'@Bosn',

        $age:null,//这个情况下就是将age作为一个可以改变的变量放在里面

        get age(){

        if(this.$age==undefined){

            this.$age = new Date().getFullYear()-2000;

        }

        return this.$age;


    },//这个千万不要忘记添加上,因为里面定义的函数也是作为一个元素放在里面

        set age(val){

         val = +val;//这里面的+操作是为了变成数字,隐式转换

         if(!isNaN(val)&&val>0&&val<150){

            this.$age = +val;

    }else{

        throw new Error('Incorrect val' + val);


    }

    }

    }

    undefined

    man.age

    21

    man.age = 100

    100

    man.age

    100

    man.age = 160


    function foo(){}

    undefined

    Object.defineProperty(foo.prototype,)

    VM8890:1 Uncaught TypeError: Property description must be an object: undefined

        at Function.defineProperty (<anonymous>)

        at <anonymous>:1:8

    (anonymous) @ VM8890:1

    Object.defineProperty(foo.prototype,'z',{get:function(){return 1;}});

    {constructor: ƒ}

    var obj = new foo();

    undefined

    obj.z = 1

    1

    obj.z = 10

    10

    obj.z

    1

    Object.defineProperty(obj,'z',{value:100,configurable:true});

    foo {z: 100}

    obj.z

    100

    delete obj.z

    true

    obj.z

    1

    //因为上面删除掉了原来的本身obj上的z所以只能向上寻找z

    undefined

    //另外有一个上面删掉的内容,就是create这个继承的东西

    undefined

    var o = {};

    undefined

    Object.defineProperty(o,'x',{value:1});

    {x: 1}

    var n = Object.create(o);

    undefined

    n.x

    1

    o.x = 100

    100

    o.x

    1

    //会发现上面依旧是1,是因为在默认情况下o里面的x是不可writeable的

    undefined

    //如果要改变这种状态可以先创建一个x,这样在原型链上的x就不会被先访问到

    undefined

    Object.cra

    undefined

    Object.defineProperty(n,'x',{value:1,writable:true});

    {x: 1}

    n.x = 100

    100

    n.x

    100

    //就可以更改了

    0赞 · 0采集
  • M_pang 2021-03-01

    get/set与原型链:

    http://img3.mukewang.com/603cacec0001698908890510.jpg

    http://img4.mukewang.com/603cacf40001d87708820497.jpg

    0赞 · 0采集
  • Zison_Chen 2021-02-01

    http://img3.mukewang.com/6017b58e0001771310560595.jpg

    get set 方法 修改属性的不同

    截图
    0赞 · 0采集
  • weixin_慕仰4026621 2020-10-24
    val=+val
    截图
    0赞 · 0采集
  • 慕容7322432 2020-09-24

    如果通过get/set方法设置和访问对象属性的时候,当通过obj.x方式添加属性的时候会先检查原型链上是否有get/set方法,如果有的话不会在对象上新创建一个属性,所以值设置不成功。

    解决方法就是通过defineProperty设置属性

    截图
    0赞 · 0采集
  • 慕容7322432 2020-09-24

    get/set方法例子

    截图
    0赞 · 0采集
  • 一只小马甲甲 2020-07-13

    +val => 使得val转化为数字

    截图
    0赞 · 0采集
  • 一只小马甲甲 2020-07-13

    这里的双等 使得如果没有定义 也是undefined 因为null==undefined(双等)

    截图
    0赞 · 0采集
  • 李可意 2020-07-07

    get:获取

    set:设置


    截图
    0赞 · 0采集
  • 慕用1198799 2020-04-13

    $age就是一个变量,不想在函数外部暴露这个属性

    +val:将val变为数字

    0赞 · 0采集
  • 慕无忌1797345 2020-04-09

    get, set设置属性与一般设置属性的区别,get、set不加冒号,而是空格分隔。

    截图
    0赞 · 0采集
  • 为了前端 2020-01-12

    get/set与原型链

    赋值、查询的时候会从原型链上赋值查找

    赋值:obj是没有z属性的,往上查找,到foo函数的时候,有z的属性和foo函数对应的get/set方法,不会在obj对象上添加新的属性。

    configurable//能否使用delete、能否需改属性特性、或能否修改访问器属性、,false为不可重新定义,默认值为true.



    截图
    0赞 · 0采集
  • 曾庆林 2019-12-18

    definePropery x可以覆盖 writable=false的属性

    截图
    0赞 · 0采集
  • 曾庆林 2019-12-18

    object get  自己

    截图
    0赞 · 0采集
  • 曾庆林 2019-12-18

    get 与set 原型链方法

    截图
    0赞 · 0采集
  • 曾庆林 2019-12-18

    get 与set

    截图
    0赞 · 0采集
  • 自由的心bin 2019-11-29
    原型上有get或set,直接给增加属性并赋值是没用的
    截图
    0赞 · 0采集
  • 慕移动1061325 2019-09-27

    getter和setter方法

    截图
    0赞 · 0采集
  • 慕勒8757584 2019-09-20

    11111111111111

    截图
    0赞 · 0采集
  • 慕勒8757584 2019-09-20

    要给obj对象赋值z,用Object.defineProperty方法,并可配置设为true

    截图
    0赞 · 0采集
  • 慕勒8757584 2019-09-20

    当obj偿试赋值z时,在原型链上查找时,发现原型有get或set方法时,当偿试赋值时,会走原型 的get和set|方法,不会在当前对象添加新属性的方式

    截图
    0赞 · 0采集
  • 慕勒8757584 2019-09-20

    在函数外访问age 不用$

    截图
    0赞 · 0采集
  • 慕勒8757584 2019-09-20

    $age,特殊的,不想暴露在外面

    val=+val,用一元操作符,目的是变成数字(本身是数字时什么都不做)

    截图
    0赞 · 0采集
  • 慕勒8757584 2019-09-20

    get和set方法用逗号隔开

    访问age时,会自动调用get 方法

    截图
    0赞 · 0采集
  • andyquan 2019-07-23

    修改writable和configurable:true实现当前对象可以赋值

    截图
    0赞 · 0采集
  • andyquan 2019-07-23

    为什么第二个obj.z还是1:?

    实际上obj对象上没有z的属性并且向上查找时发现有get或者set的方法,当我们尝试去赋值时是会走原型链上的get、set方法,而不会再去通过给当前对象添加新属性的方式去处理。因此obj.z=10的赋值在这里是没有实现到的。

    截图
    0赞 · 0采集
  • andyquan 2019-07-23

    Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。

    截图
    0赞 · 0采集
  • andyquan 2019-07-23

    isNaN是判断是否是非数字值

    截图
    0赞 · 0采集
  • andyquan 2019-07-23

    $age是一种特殊的key,是不想暴露age的value

    截图
    0赞 · 0采集
数据加载中...
开始学习 免费