• javascript私有属性失效及解决方案


    1.js创建私有属性的方法

    在 javascript 中所有对象的成员是公有的 构造函数也是如此:

    1 function Gadget ( ) {
    2     this.name = ' jack ';
    3     this.putName = function ( ) {
    4         return (' this is jack ');
    5     } 
    6 }
    7 var obj = new Gadget();
    8 console.log( obj.name );   //jack
    9 console.log( obj.putName ); //this is jack 
    我们可以通过在函数内部声明变量来生成外部无法访问的所谓的私有变量  , 将 this  赋值 改成 var 声明 
    1 function Gadget ( ) {
    2     var name = ' jack ';
    3     this.putName = function ( ) {
    4         return name;
    5     } 
    6 }
    7 var obj = new Gadget();
    8 console.log( obj.name );   //  undefined
    9 console.log( obj.putName ); //   jack 

    2.私有属性失效和解决办法

    当私有属性是数组或者是对象的时候返回给外部,外部是可以对返回的值进行修改,因为他们不是单纯的对值复制,而是对引用的复制

     1 function Gadget () {
     2   //私有  对象或者数组
     3   var specs = {
     4     _widt: 10,
     5     _height: 100,
     6     _color: "red"
     7   };
     8   //方法 共有
     9   this.getSpecs = function () {
    10     return specs;
    11   }
    12 }
    13 var obj = new Gadget();
    14 var specs = obj.getSpecs();
    15 specs._color = "black";
    16 console.dir(obj.getSpecs());

    为了避免这样的情况,我们可以不将对象或数组直接返回,而是新声明一个对象,将其赋值部分或全部数据返回给用户:

    1 this.getSpecs = function () {
    2     var color = {
    3        specs._width,
    4       height: specs._height,
    5       color: specs._color
    6     }
    7     return color;
    8   }

    也可以通过利用对对象的深复制,返回复制后的新对象

  • 相关阅读:
    [offer_53-1] 在排序数组中查找数字 I (开启编辑看 i,j,m)
    window10 办公软件word、execel、ppt突然变得很卡顿如何解决?
    数组中第k大的数
    heapq 堆
    每日一题 482. 密钥格式化
    算法笔记Go!
    DFS与BFS的python实现
    无向图中找到长度为k的“链”
    无序数组中找一个比左边都大、右边都小的数
    SRM(空域富模型隐写分析)
  • 原文地址:https://www.cnblogs.com/nanshanlaoyao/p/5853459.html
Copyright © 2020-2023  润新知