• javascript中各种类成员的实现方式


    在OO泛滥的年代,来看看js中是怎样实现私有成员的。
    我之前买过一本书《Javascript高级程序设计》 Nicholas C.Zakas 著
    总体来讲这本书还是可以的,但看完这本书还留了几个问题一直困扰着我,如js中私有变量的实现,prototype等,经过自己一系列测试,现在终于弄明白了。
    很多书上都是说,js是不能真正实现私有成员的,因此在开发的时候,统一约定 __ 两个下划线开头为私有变量。
    后来,发现js中闭包的特性,从而彻底解决了私有成员的问题。

     1 function testFn(){
     2       var _Name;//定义私有成员
     3       this.setName = function(name){
     4          _Name = name; //从当前执行环境中获取_Name
     5       }
     6       this.getName = function(){
     7          return _Name;
     8       }
     9 }// End testFn
    10 var test = testFn();
    11 alert(typeof test._Name === "undefined")//true
    12 test.setName("KenChen");
    13 
    test._Name 根本访问不到,但是用对象方法能访问到,因为闭包能从当前的执行环境中获取信息。

    接下来我们看看,共有成员是怎样实现的

     1 function testFn(name){
     2    this.Name = name;
     3    this.getName = function(){
     4       return this.Name;
     5    }
     6 }
     7 var test = new testFn("KenChen");
     8 test.getName(); //KenChen
     9 test.Name = "CC";
    10 test.getName();//CC
    11 

    接下来在看看类静态变量是怎样实现的
    function testFn(){
    }
    testFn.Name 
    = "KenChen";
    alert(testFn.Name);
    //KenChen
    testFn.Name = "CC";
    alert(testFn.Name);
    //CC

    关于Portotype,继承等以后的博文中叙述。
  • 相关阅读:
    .NET泛型中的协变与逆变
    使用 Roslyn引擎动态编译代码
    Windows 自动更新服务恢复
    She Left Her Shoes
    .NET Core 配置
    EFCore中SQLSERVER 2008 的分页问题
    SQL SERVER 2012/ 2014 分页,用 OFFSET,FETCH NEXT改写ROW_NUMBER的用法(转)
    TFS命令行操作
    负载均衡(Load Balancing)学习笔记(三)
    负载均衡(Load Balancing)学习笔记(二)
  • 原文地址:https://www.cnblogs.com/KenChen/p/1528256.html
Copyright © 2020-2023  润新知