精华内容
下载资源
问答
  • tsprivate和protected

    万次阅读 2018-07-24 15:08:30
    1.private  私有的。表示最隐私,最不能为外人知道的。  在类如果声明一个属性为私有,则表示这个属性仅仅属于这个类。 仅仅能在这个类进行在这个属性的访问。在子类和类的实现的对象中都不能访问。在子类...

      

    1.private

       私有的。表示最隐私,最不能为外人知道的。

      在类中如果声明一个属性为私有,则表示这个属性仅仅属于这个类。

    仅仅能在这个类中进行在这个属性的访问。在子类和类的实现的对象中都不能访问。在子类可以通过调用使用这个属性的方法来间接lai'来使用这个属性。

    2.protected

    被保护的。针对 对象。因为一个类可以化身为好多好多的dui对象。对于一些这些dui'对象应该共有的一样的属性不应该让对象有访问和修改的权力。

    对于protected声明的属性,可以在子类中fa访问他。不能在实现对象中fa访问。

    对于protectedshen声明的gou'构造方法。则该方法只能在ji'c继承的子类中diao调用bu'n不能直接 在chau创建对象的时候直接调用。即该类只能被继承不能被shi'实现。

    展开全文
  • tsprivate和protected区别

    千次阅读 2019-09-25 16:54:33
    tsprivate和protected区别 private 私有的。表示最隐私,最不能为外人知道的。 在类如果声明一个属性为私有,则表示这个属性仅仅属于这个类。 仅仅能在这个类进行在这个属性的访问。在子类和类的实现的...

    ts类中的private和protected区别

    private

    在类中如果声明一个属性为私有,则表示这个属性仅仅属于这个类。
    仅仅能在这个类中进行在这个属性的访问。在子类和类的实现的对象中都不能访问。在子类可以通过调用使用这个属性的方法来间接来使用这个属性。

    class contrl{
         private num:any;
     }
    class SUM extends contrl{
     //erorr 类“SUM”错误扩展基类“contrl”。属性“num”在类型“contrl”中是私有属性,但在类型“SUM”中不是。
        num=12
    }
    

    protected

    被保护的对象。因为一个类可以化身为好多好多的对象。对于一些这些对象应该共有的一样的属性不应该让对象有访问和修改的权力。
    对于protected声明的属性,可以在子类中访问他。不能在实现对象中访问。
    对于protected声明的构造方法。则该方法只能在j继承的子类中调用不能直接 在创建对象的时候直接调用。即该类只能被继承不能被实现。

    class contrl{
        protected num:any;
    }
    //定义为protected就没有报错
    class SUM extends contrl{
        num=12
    }
    
    展开全文
  • private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。和public相反,加上这个修饰的属性和方法,只允许在自己本身这个类里访问,...

    public

    public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用,在程序的任何其它地方访问。

    private

    private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。和public相反,加上这个修饰的属性和方法,只允许在自己本身这个类里访问,程序的任何其它地方都不能访问

    protected

    protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。受保护的,位于public和private中间,加上这个修饰的属性和方法,只能在子类(extends)和同包下的程序访问,别的的地方不能访问。

    default(默认)

    同一包中的类可以访问,声明时没有加修饰符,认为是friendly。

    展开全文
  • TS Private Fields

    2020-05-15 00:30:57
    目录官网说明概述私有字段的用法私有字段的尝试私有字段和 private 修饰符的区别私有字段的支持 文章 PDF 版 官网说明 Handbook - TypeScript 3.8 概述 对私有字段的支持是从 TypeScript 3.8 开始的。(私有字段目前...

    官网说明

    Handbook - TypeScript 3.8

    概述

    私有字段的支持是从 TypeScript 3.8 开始的。(私有字段目前在 EcmaScript 中尚处于 stage-3 )

    私有字段以 # 开始,如下:

    class Person {
        #name: string
    
        constructor(name: string) {
            this.#name = name;
        }
    
        greet() {
            console.log(`Hello, my name is ${this.#name}!`);
        }
    }
    
    let jeremy = new Person("Jeremy Bearimy");
    
    jeremy.#name
    //     ~~~~~
    // Property '#name' is not accessible outside class 'Person'
    // because it has a private identifier.
    

    私有字段的用法

    私有字段的使用规则:

    • 私有字段以 # 开始。
    • 每个私有字段的名字,在被包含的类中,都是唯一的。
    • TypeScript 辅助功能修饰符(public、private 等)不能在私有字段上使用。
    • 私有字段不能在所包含的类之外访问;即使是对于 JavaScript 使用者来说也是如此。

    针对以上规则的第 2 条 “每个私有字段的名字,在被包含的类中,都是唯一的。”,有以下示例对其做出解释:

    • 常规属性声明容易在子类中被改写,私有字段不会被子类改写,每个私有字段,在所包含的类中,都是唯一的。

      // 常规属性声明
      class C {
        foo = 10;
      
        cHelper() {
          return this.foo;
        }
      }
      
      class D extends C {
        foo = 20;
      
        dHelper() {
          return this.foo;
        }
      }
      
      let instance = new D();
      // 'this.foo' refers to the same property on each instance.
      console.log(instance.cHelper()); // prints '20'
      console.log(instance.dHelper()); // prints '20'
      
      // 私有字段声明
      class C {
          #foo = 10;
      
          cHelper() {
              return this.#foo;
          }
      }
      
      class D extends C {
          #foo = 20;
      
          dHelper() {
              return this.#foo;
          }
      }
      
      let instance = new D();
      // 'this.#foo' refers to a different field within each class.
      console.log(instance.cHelper()); // prints '10'
      console.log(instance.dHelper()); // prints '20'
      

    对于私有字段的使用,还需要注意的一点是:除非在某个对象的类型声明中声明了某个私有字段,否则,在未声明该私有字段的对象中无法使用该私有字段,会报错。

    class Square {
        #sideLength: number;
    
        constructor(sideLength: number) {
            this.#sideLength = sideLength;
        }
    
        equals(other: any) {
            return this.#sideLength === other.#sideLength;
        }
    }
    
    const a = new Square(100);
    const b = { sideLength: 100 };
    
    // Boom!
    // TypeError: attempted to get private field on non-instance
    // This fails because 'b' is not an instance of 'Square'.
    console.log(a.equals(b));
    

    私有字段的尝试

    在看过对私有字段的概述及用法介绍后,我实际尝试了一番,但却碰到了一些问题,具体如下:

    • 示例代码:

      // private-field.ts
      class Person {
          #name: string;
      
          constructor(name: string) {
              this.#name = name;
          }
      
          greet() {
              console.log(`Hello, my name is ${this.#name}!`);
          }
      }
      
      const jeremy = new Person("Jeremy Bearimy");
      
      jeremy.greet();
      

      以上示例代码完全是从官网 Copy 下来的,但是在 IDE 中却显示出错!
      不支持

      这是怎么回事呢?

    • 看一下报错信息:

      // TS18028: Private identifiers are only available when targeting ECMAScript 2015 and higher.
      // Private 标识符仅在 ECMAScript 2015 及更高版本可用
      

      原来如此!我当前的版本不支持私有字段!

      但是不对啊,我的 TypeScript 版本就是 3.8 啊!
      TypeScript version

      那是怎么回事呢?在 stackoverflow 的一个提问中我找到了原因:我的 tsconfig.json 配置错了
      错误target

      我的编译目标版本错了,是 es5 ,而报错信息已经明确提示了,要求的版本是 ES 2015 及以上

    • 解决方案

      找到了问题所在,那么,解决起来就很简单了!
      target

      可以看到,在将编译目标版本改到 es2015 后,原本 private-field.ts 上的出错提示已经消失了。

    • 运行效果
      运行效果

    • 私有字段的效果

      示例已经顺利运行起来了,那么,到底这个私有字段有没有用呢?

      在之前的示例代码中加上一行:

      class Person {
          #name: string;
      
          constructor(name: string) {
              this.#name = name;
          }
      
          greet() {
              console.log(`Hello, my name is ${this.#name}!`);
          }
      }
      
      const jeremy = new Person("Jeremy Bearimy");
      
      jeremy.greet();  
      console.log(jeremy.#name);
      //                 ~~~~~
      // TS18013: Property '#name' is not accessible outside class 'Person' because it has a private identifier.
      

      报错了!
      报错信息

      果然,私有字段还是非常犀利的!😊😊😊

    私有字段和 private 修饰符的区别

    • TypeScript 中的 private 修饰符在编译为 JavaScript 后就完全被删掉了,相当于实际上是没有用的。
    • 私有字段即便编译为 JavaScript 也会存在。

    私有字段的支持

    由于目前 ECMAScript 对私有字段的支持尚在 stage-3 ,虽然可以用 Babel 实现在 JavaScript 中使用私有字段,但是不使用插件的话,将 TypeScript 编译为 JavaScript 会报错。

    当然,也有可能是可以编译成功的,但是我目前由于没有深入地研究,所以暂时还没有实验成功。
    编译成功

    展开全文
  • ts中面向对象成员修饰符:public , private , protexted(ts官方网站:ts) 在ts中,默认的成员修饰符就是public public:是表示是公开的,在任何地方,都可以调用,不管在类,还是子类,还是对象均是可以...
  • ,在你运行的时候他自己在内存开辟了块空间,不用new,老哥你要是new了 ,那么恭喜你 报错 +1 、 至于 public 或 private 与其他成员一样, 在我们用egret的时候 当定义时 如果前面不追加 private 那么它默认就是...
  • 同一包的任意类可以访问,包括自身与子类 private 只有自身类可以访问,子类也不可以 Typescript public 类的外部可以访问 protected 自身类与继承类可以使用 class test { public name='fu' protected age...
  • 需要测试的class class People { protected status: string; construct(public name: string, sex: 'male'|'female', age: ... private excrete(): void { this.status = '撒尿'; } public talk(who: stri...
  • private protected public 访问类型 public 允许我在类的内外被调用 private 允许在类内被调用 protected 允许在类内及继承的子类使用 写个demo来体验一下,更容易理解 // private protected public 访问类型 //...
  • input set set就是用来处理逻辑值的,就是拿到值后做逻辑...public与private 只有当前类用的属性是private类型,类外部可以访问的是public 参考: https://blog.csdn.net/wshl1234567/article/details/4525014...
  • 接口 定义方式 直联定义 function printLabel(labelledObj: { label: string }) { console.log(labelledObj.label); } 引用定义 interface LabelledValue { label: string;...ts会检查参数是否含有接口
  • // 写方法的重载 在ts实现 要先声明 然后在实现 eat(food: string): boolean; //{result: boolean, msg: string} 是方法要返回的结构样式 eat(food: {name: string, amount: number}): {result: boolean, msg:...
  • ts 手动实现 ts 的map

    千次阅读 2021-01-17 09:53:48
    ts 手动实现 ts 的map 实现的功能如下: 按照键,删除对应的键值对 del() 循环每一个键值对 forEach() 得到当前键值对的数量 size 判断某个键是否存在 has() 重新设置某个键对应的值,如果不存在,则添加 set() ...
  • vue-property-decorator的...script lang="ts"> import { Component, Vue } from 'vue-property-decorator'; @Component({ //Component组件装饰器,用于增加一些全局的配置,比如过滤器filters components: { ...
  • ts文件必须转为js文件才能在html引入。 TypeScript是一种由微软开发的开源、跨平台的编程语言。它是JavaScript的超集,最终会被编译为JavaScript代码。TypeScript添加了可选的静态类型系统、很多尚未正式发布的...
  • ts的class和es 6的class 有什么区别?两者类似但有不同点是ts多了一些修饰符 类的基本使用 定义一个最简单的Lady类,这里要使用关键字class,类里边有姓名属性和一个得到姓名的方法,代码如下: class Lady { ...
  • ts中的类

    千次阅读 2018-07-17 22:15:59
    ts中定义类 class Person{ name:string; constructor(name:string){ this.name=name }; run():void{ alert(this.name) } } var p=new Person('里斯'); p.run() ts实现set和get cl...
  • :string) { this.name = _name || '' } } let foo = new Foo('小明') // Foo {name:'小名'} private (可以被继承,但是无法在实例访问) class Foo { private name:string constructor (_name:string) { ...
  • import * as winston from 'winston'; // 引入config模块,log相关配置放在配置文件下 import config from 'config'; class Logger { ... private readonly consoleLevel: string;... private readonly fileLevel: ...
  • TS中的事件,事件监听,移除,分发

    千次阅读 2019-12-25 14:00:15
    TS中的事件,事件监听,移除,分发 TS代码如下(单例): /** * 事件消息处理 */ class EventCenter { /** 监听数组 */ private listeners = {}; private static _instance = null; public static get ...
  • TS中的一些符号

    千次阅读 2020-11-27 01:06:00
    在上下文当类型检查器无法断定类型时,一个新的后缀表达式操作符 ! 可以用于断言操作对象是非 null 和非 undefined 类型。具体而言,x! 将从 x 值域排除 null 和 undefined 。 那么非空断言操作符到底有什么用呢...
  • 官网地址:... public 公共的 private 私有的 protected 受保护的   class Animal{ public size:string = "small" protected name:string private fierce:number ...
  • TS-修饰符 与 static

    千次阅读 2019-07-19 14:42:59
    TS-修饰符 与 static 1.static: 用于 修饰 变量 或者方法,表示 静态的 当类 的 方法 被 声明 为 static 时,其实例化 对象 不可 调用 该方法,只有 类 本身 ,以及 其子类 可以 调用。 eg: class A { name:...
  • 第一种 indext.html中用script引入 <...</script> 组件调用方式 <script > import { Component , Vue } from 'vue-property-decorator'; declare let echarts:any; //要先声明 @Component
  • 获取类private变量

    千次阅读 2018-10-16 14:09:15
    在类的定义,会将一些不愿意被其他类直接使用的变量定义为private变量。要对类内的变量进行读取或修改,需要调用该类的public方法。那么在编译过程,是否真的只能通过类提供的公开的方法来修改其私有的变量吗...
  • 1、在当前的ts文件import需要引入的模块,如下: import {A} from '../a/a' 其中{A}是另外模块ts中的class名称;'../a/a'第一个a是a模块所在的文件夹名称,第二个a是ts文件的名称 2、然后在将A类添加到...
  • ts中class类讲解

    2020-10-01 10:05:41
    private sy = '私有的'//只能在当前类内部访问 protected bh: string = '保护的'//只能在当前类内部和子类内部访问 constructor(n: string) { this.name = n console.log('保护1', this.bh)
  • vue使用ts时 @Model的作用 在开发vue项目时 里面的ts文件 可以看到@model 这个也是双向数据绑定 相当于v-model 还是用代码来展示一下 首先是子组件 <template> <div> <h1>child-component<...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,470
精华内容 20,188
关键字:

ts中的private