zoukankan      html  css  js  c++  java
  • 公有属性和私有属性

    公有属性:

      当我们定义一个对象后,使用对象的人在实例化之后可以访问到对象内部的属性;

    私有属性:

      对象的属性不能被访问者看到;只能在函数内部使用。好处就是安全,就类似闭包中的函数一样,减少污染。通过var 变量来实现;如:

    1 var className='用户对象‘;
    function Person(name){
        //私有属性,只能在对象构造函数内部使用
        var className = "用户对象";
    
        //公有属性,在对象实例化后调用
        this.name = name;
    
        //私有方法
        var privateFunction = function(){
            alert(this.name); //公有属性
            alert(className); //正确 直接通过变量名访问
            alert(this.className); //undefined 错误 不能这样访问
        }
    
        //公有方法
        this.publicFunction = function(){
            alert(this.name); //公有属性
            alert(className); //正确 直接通过变量名访问
            alert(this.className); //undefined 错误 不能这样访问
        }
    }
    

      

    私有变量:任何函数中定义的变量都可以认为是私有变量,因为不能在函数外部访问到;
    包括: 函数的参数
    局部变量
    函数内部定义的其他变量
    特权方法:有权访问私有变量和私有函数的公有方法;
    方法一:
    <script>
    function MyObject=10;
    // 私有变量和私有函数
    var privateFunction(){
    return false;
    }
    // 特权方法
    this.publicMethod=function(){
    privateVariable++;
    return privateFunction();
    }
    // 因为特权方法作为闭包有权访问在构造函数中定义的所有变量和函数
    </script>
    知识点二:
    利用私有和特权成员,可以隐藏那些不应该被直接修改的数据;
    如:
    <script>
    function Person(name){
    this.getName=function(){
    return name;
    };
    this.setName=function(value){
    name=value;
    };
    }
    var person=new Person('Nicholas');
    console.log(person.getName());//Nicholas;
    person.setName('grey');
    console.log(person.getName());//grey;
    // getName()和setName()为特权方法,可以被外面访问;私有变量name在person的每个实例中都不相同,因为每次调用构造函数都会重建这两个方法;
    </script>
    案例:
    <script>
    function Person(name){
    var className='用户';//私有属性
    this.name=name;//公有属性
    var privateFunction=function(){
    console.log(this.name);//私有方法
    }
    this.publicFunction=function(){//公有方法
    console.log(this.name);//xiaowang
    console.log(className);//用户
    console.log(this.className);//undefined
    }
    }
    var person=new Person('xiaowang');
    console.log(person.className);//undefined
    console.log(person.name);//xiaowang
    console.log(person.publicFunction());//undefined
    console.log(person.privateFunction());// person.privateFunction is not a function
    </script>

  • 相关阅读:
    【Canvas】(1)---概述+简单示例
    【jQuery】(8)---jquery Ajax
    lastlogon
    windows server core 2016 IIS远程管理的那些坑
    开机手机显示存储空间不足某些系统功能可能无法正常使用,而且无法取消这个界面,导致手机停在这个界面无法操作。
    javascript prototype理解
    微信小程序诡异错误this.setData报错
    转:goproxy和go modules的初步使用
    真机调试No target device的解决(android studio)3.4.1
    unable to access android sdk add-on list的解决
  • 原文地址:https://www.cnblogs.com/yangguoe/p/8057118.html
Copyright © 2011-2022 走看看