• js的隐式屏蔽


    1.首先,我们先来了解一下js的getOwnProperty和in和Object.keys()以及getOwnPropertyNames

    hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键)。

    Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致 。

    for...in  循环只会遍历可枚举属性,以及从其原型继承过来的属性

    Object.getOwnPropertyNames()方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。

    2.

               var anotherObject = {
                    a:2,
                };
                
                Object.prototype.create = function(elem){
                    let o = function(){};
                    o.prototype = elem;
                    return new o();
                }
                var myObject = Object.create(anotherObject);
                console.log(anotherObject.a);//2
                console.log(myObject.a);//2
                console.log(anotherObject.hasOwnProperty("a"));//true
                console.log(myObject.hasOwnProperty("a"));//true

    通过以上我们可以看出myObject虽然有a的值,但是没有a这个属性,它这个属性是anotherObject那里继承过来的。

    3.但是我们如果执行以下的代码,结果就不一样了

                myObject.a++;//隐式屏蔽
                console.log(anotherObject.a);//2
                console.log(myObject.a);//3
                
                console.log(myObject.hasOwnProperty('a'));//true

    这是因为myObject.a++就相当于myObject.a = myObject.a+1;所以myObject就有了a的属性,这个称为隐式屏蔽

  • 相关阅读:
    渚漪Day07——web前端入门【JavaScript02】
    渚漪Day06——web前端入门【HTML补充】【JavaScript01】
    渚漪Day05——注解与反射
    IDEA小知识
    圆覆盖
    数据降维算法——主成分分析
    word Embedding 大杂烩
    fastNLP学习笔记——Vocabulary
    fastNLP学习笔记——Dataset
    Batch Normalization 与 Layer Normalization
  • 原文地址:https://www.cnblogs.com/MySweetheart/p/13655985.html
Copyright © 2020-2023  润新知