zoukankan      html  css  js  c++  java
  • 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的属性,这个称为隐式屏蔽

  • 相关阅读:
    上篇用到的matcher函数
    lambdaj学习
    Redis高级应用——2
    Redis入门
    从gitee 下载代码到本地
    CSS中对图片(background)的一些设置心得总结
    nodejs 安装Ionic 和cordova
    Spring MVC内容协商机制详解
    基于Servlet3.0的编程式SpringMVC实例详解
    基于Junit的Spring集成测试方法
  • 原文地址:https://www.cnblogs.com/MySweetheart/p/13655985.html
Copyright © 2011-2022 走看看