首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

会员提问 之 JS中的私有方法有什么意义?

先说结论, (1)JavaScript没有私有方法。 (2)JavaScript的私有方法都是通过“作用域”来实现的。 (3)有没有用?有没有意义?肯定有! 什么是JS的私有方法呢?...通俗的讲,在一个构造函数里面定义的function,只有父类可以访问的方法和属性,就是一个私有方法。...') } x(); } var ms = new mySon(); ms.x() //报错,ms.x is not a function 从这个例子可以看出,私有方法的表现形式之一就是外部无法访问,...接下来,它有什么意义呢? 首先就是模块化。没有私有方法,模块化无从谈起。模块化的好处自不必多提,松耦合啊,好维护啊,可复用啊,,等 其次是保护、隐藏内部的私有字段和方法,防止被外部程序修改。...还有就是,避免污染全局变量了。省得你给变量或函数起名,到后来都名字都会重复了。 最重要的是,从这个角度深入学习下去,就会分清:“ 对象方法、类方法、原型方法、私有属性、公有属性、公有静态属性”。

1.6K80

【Kotlin】Kotlin 单例 ( 懒汉式 与 恶汉式 | Java 单例 | Kotlin 单例 | 对象声明 | 伴生对象 | get 方法 | ? 与 !! 判空 )

Java 中的懒汉式与恶汉式 III . Kotlin 中对应 Java 的懒汉式与恶汉式 IV . Kotlin 对象 ( object ) 声明 V ....单例类简介 : 单例是保证在应用程序的内存中 , 只存在一个实例的设计模式 ; ① 饿汉式 : 这个类只要一声明对象 , 只要该类被调用到 , 不管有没有用到其单例对象 , 必须马上创建一个该单例对象...单例类特点 : ① 私有静态化单例成员变量 ; ② 私有化构造函数 ; ③ 公共静态获取单例方法 ; 详细的 Java 与 Kotlin 单例示例详细看下面的四个示例 II ....Kotlin 懒汉单例模式 : 该示例中涉及到了伴生对象 , 字段 getter 方法定义 , ? 和 !!...= null //这是 Kotlin 中特有的 get set 方法定义方式 // 在成员变量的下面可以直接定义该成员的 get() set() 方法

85720
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    About Kotlin-Kotlin中的类2About Kotlin(2)

    其也可以有子类,所有子类也必须在相同的文件中声明。 密封类从某种意义上说,它们是枚举类的扩展:枚举类型的值集也受到限制,但每个枚举常量仅作为单个实例存在,而密封类的子类可以包含多个实例并包含状态。...中使用对象表达式和对象声明进行表示 对象表达式(匿名类) 匿名类其实就是在Java中的匿名内部类。...: 匿名对象可以用作只在本地和私有作用域中声明的类型。...这里需要注意的是: 在 JVM 平台,只有使用 @JvmStatic 注解,才能将伴生对象的成员生成为真正的静态方法和字段。...//@JvmStatic 注解也可以应用于对象或伴生对象的属性, 使其 getter 和 setter 方法在该对象或包含该伴生对象的类中是静态成员。

    2.6K20

    重学 Kotlin —— object,史上最 “快” 单例 ?

    介绍 Kotlin 语法的文章很多,那么,在这个系列中,我会写一些什么呢? Kotlin 再强大,也逃脱不了在 JVM 上运行。经过 kotlinc 编译之后,生成的依旧是 .class 文件。...目录 object 有哪些用法? 对象声明 —— 一个关键字实现单例 ? 伴生对象 —— static 的代替者 ? 对象表达式 —— Kotlin 的匿名内部类 ? 这到底是哪种用法 ?...下面来看看 伴生对象 。 伴生对象 你可以回想一下,你在 Kotlin 中使用过 static 关键字吗?答案肯定是没有。...伴生对象仍旧符合这一语义。 在 Java 中如何调用伴生对象呢?User.Companion.isMale(1) 即可。...和 Java 的匿名内部类一样,对象声明中也可以访问外部变量。 对象表达式应该是 object 最朴实无华的使用方式了。 最后 看到这里,你应该已经完全掌握了 object 关键字的本质。

    3.3K20

    Kotlin 与 Java 对比Kotlin 开发者社区

    Kotlin 解决了一些 Java 中的问题: Kotlin 通过以下措施修复了 Java 中一系列长期困扰我们的问题 空引用由类型系统控制。...无原始类型 Kotlin 中数组是不型变的 相对于 Java 的 SAM-转换,Kotlin 有更合适的函数类型 没有通配符的使用处型变 Kotlin 没有受检异常 Java 有而 Kotlin 没有的东西...受检异常 不是类的原生类型 静态成员 非私有化字段 通配符类型 Kotlin 有而 Java 没有的东西 Lambda 表达式 + 内联函数 = 高性能自定义控制结构 扩展函数 空安全 智能类型转换...字符串模板 属性 主构造函数 一等公民的委托 变量和属性类型的类型推断 单例 声明处型变 & 类型投影 区间表达式 操作符重载 伴生对象 数据类 分离用于只读和可变集合的接口 协程

    53320

    【Android进阶】Kotlin笔记

    Kotlin默认支持委托,不像Java,要么用IDE生成一大堆代码,要么在编译期使用其他动态代理工具生成,Kotlin默认提供了by关键字。...伴生对象 Java中经常会使用静态工厂方法来构造对象,这是因为静态工厂方法比构造器更加适用于处理那些很多属性可以不在构造时提供的类。静态工厂方法更加具有可读性。...Kotlin根本没有静态这一说,Kotlin代替静态的办法一个是object,一个是顶层函数。但这俩都不适用于静态工厂,因为静态工厂经常要访问类中的私有成员。 伴生对象是用来干这些的。...fun fromJson(json: String): Person{ ... } } } fun main(){ Person.Loader.fromJson() } 伴生对象也可以有扩展函数...,这是因为像上面的Loader这种伴生对象和类中的逻辑关系不大,分离到外部可以实现关注点分离。

    71820

    Kotlin的互操作——Kotlin与Java互相调用

    【例5】将Kotlin变量编译成Java中的变量声明。...如果一个属性有幕后字段(Backing Field)、非私有的、没有open/override或者const修饰符,并且不是被委托的属性,那么可以使用@JvmField注解该属性。...④ 静态方法 Kotlin将包级函数表示为静态方法。如果对这些函数使用@JvmStatic进行标注,那么Kotlin还可以为在命名对象或伴生对象中定义的函数生成静态方法。...();//没问题,通过单例实例调用 Obj.INSTANCE.foo();// 也没问题 @JvmStatic注解也可以被应用于对象或伴生对象的属性上,使其getter和setter方法在该对象或包含该伴生对象的类中是静态成员...extends Base> box) { … } 当参数类型是final时,生成通配符通常没有意义,所以无论在什么地方Box始终转换为Box。

    3.8K10

    《Kotin 极简教程》第7章 面向对象编程(OOP)(2)《Kotlin极简教程》正式上架:

    这几个注解定义在kotlin/annotation/Annotations.kt类中。 7.8.2 使用注解 注解可以用在类、函数、参数、变量(成员变量、局部变量)、表达式、类型上等。...另外,如果想使用Java中的静态成员和静态方法的话,我们可以用: @JvmField注解:生成与该属性相同的静态字段 @JvmStatic注解:在单例对象和伴生对象中生成对应的静态方法 7.10 sealed...密封类 7.10.1 为什么使用密封类 就像我们为什么要用enum类型一样,比如你有一个enum类型 MoneyUnit,定义了元、角、分这些单位。...在某种意义上,sealed类是枚举类的扩展:枚举类型的值集合也是受限的,但每个枚举常量只存在一个实例,而密封类的一个子类可以有可包含状态的多个实例。...在代理模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。代理模式是一项基本技巧,许多其他的模式,如状态模式、策略模式、访问者模式本质上是在特殊的场合采用了代理模式。

    1.6K20

    Better Kotlin

    3 应该好好注意一下伴生对象 伴生对象通过在类中使用 companion object 来创建,用来替代静态成员,类似于 Java 中的静态内部类。...所以在伴生对象中声明常量是很常见的做法,但如果写法不对,可能就会产生额外开销。...访问一个伴生对象的私有常量字段需要经过以下方法: 调用伴生对象的静态方法 调用伴生对象的实例方法 调用主类的静态方法 读取主类中的静态字段 为了访问一个常量,而多花费调用4个方法的开销,这样的 Kotlin...对于其他类型的常量,最好在它们自己的主类对象而不是伴生对象中来存储公共的全局常量。...5 by lazy 和 lateinit 相爱相杀 在 Android 开发中,我们经常会有不少的成员变量需要在 onCreate() 中对其进行初始化,特别是我们在 XML 中使用的各种控件,而 Kotlin

    1.3K20

    Kotlin与Java互操作

    静态字段 在命名对象或伴生对象时,声明的 Kotlin 属性会在该命名对象或包含伴生对象的类中包含静态幕后字段。通常这些字段是私有的,但可以通过以下方式之一暴露出来。...Key.COMPARATOR.compare(key1, key2); // Key 类中的 public static final 字段 在命名对象或者伴生对象中的一个延迟初始化的属性具有与属性 setter...如果对这些函数使用@JvmStatic进行标注,那么Kotlin还可以为在命名对象或伴生对象中定义的函数生成静态方法。..., 使其 getter 和 setter 方法在该对象或包含该伴生对象的类中是静态成员。...extends Base> box) { …… } 注意:当参数类型是 final 时,生成通配符通常没有意义,所以无论在什么地方 Box 始终转换为 Box。

    3.5K30

    Scala学习笔记(二)

    Scala的基础语法 我整理了自己学习过程中感到有必要记录的东西,以防忘记 1. val 与 var Scala 有两种定义变量的方式:val和var。 当val定义好变量之后,无法更改变量的值。...scala> println (param) monica 有一个建议,Scala 程序员崇尚使用val,不可变对象和没有副作用的方法。...static,在object下的成员全部都是静态的,如果在类中声明了与该类相同的名字的object则该object是该类的“伴生对象”,可以理解把类中的static集中放到了object对象中,伴生对象和类文件必须是同一个源文件...,可以用伴生对象做一些初始化的操作。...类中getter/setter 方法 在Java中,通常将字段声明为私有的,然后添加公有的getter和setter方法来提供访问字段的接口。

    58730

    Kotlin学习笔记(四)-面向对象

    } 伴生对象与静态成员 kotlin 中时没有static 这种方法修饰的静态方法 所以要实现 类似于java中的静态属性就要用到伴生对象 例子: fun main(args: Array<String...(Latitude.TAG) } /** * 私有的构造方法 companion伴生对象关键字 */ class Latitude private constructor(val latitude...) } @JvmField//加上这个注解可以在Java中如static一样调用 val TAG = "Latitude" } } 每个类可以对应一个伴生对象...伴生对象的成员全局独一份 伴生对象的成员类似Java的静态成员 静态成员考虑用包级函数、变量替代 JvmField 和JvmStatic使用后,可以用相同的语法在Java中调用 方法重载 与Java相同...枚举类中定义方法,那么要在枚举对象最后加上; 这基本是Kotlin中唯一一个需要强制写;的地方 密封类 密封类与枚举的区别:前者是子类可数,后者是实例可数 密封类(Sealed Class)的子类必须和父类定义在同一个文件中

    85510

    Kotlin入门(13)类成员的众生相

    利用伴生对象的技术,即可间接实现静态成员的功能,前面有个代码从性别类型获得性别名称,反过来也可以从性别名称获得性别类型,这个功能便可以在伴生对象中定义一个judgeSex方法判断性别类型。...,也能实现静态属性,只要在伴生对象内部声明几个变量就行。...像这种特定含义的类型数值,更好的办法是采取有实际意义的常量名称,在Android中便存在Color.RED、Color.GREEN、Color.BLUE等等颜色常量,从它们的名称能够直接对应到颜色数值。...具体到编码上面,即是在伴生对象中增加这几个常量定义,代码示例如下所示: class WildAnimalConstant(var name:String, val sex:Int = MALE) {...静态成员包括静态常量与静态方法,它们都在类的伴生对象中定义,外部可以通过类名直接使用静态成员。 点此查看Kotlin入门教程的完整目录

    58220

    Kotlin|这些隐藏的内存陷阱,你应该熟记于心

    在某种意义上,他们是枚举类的扩展:枚举类型的值集合也是受限的,但每个枚举常量只存在一个实例,而密封类的一个子类可以有可包含状态的多个实例。...推荐示例 我们在文章最开始提到了,Kotlin inline ,一般建议用于 高阶函数(lambda) 中。为什么呢?...伴生对象,也许真的不需要 在 Kotlin 中,我们不能像 Java 一样,随便定义一个静态方法或者静态属性。此时 companion object(伴生对象)就会派上用场。...Book 类中增加了一个伴生对象,其中有一个静态的字段 SUM_MAX。...上述示例虽然看着似乎没什么问题。但放在这样的场景下,这个 mClickListener 本身的意义也许并不大。为什么这样说?

    82330

    Kotlin学习日志(五)类与对象

    2.3 伴生对象 伴生对象这个是在Kotlin中有的,Java中没有,什么是伴生对象呢,你可以把它理解为“影子”,把类当做一个人,这个人可以有很多房子,但是人只有一个,影子也只有一个。...,一目了然,关键定义这个伴生对象和使用它,接下来看怎么使用 代码如下: package com.llw.kotlinstart import androidx.appcompat.app.AppCompatActivity...有四种结果,我只放两个图 2.4 静态属性 之前我们的伴生对象可以实现静态函数,同样也能实现静态属性,只要在伴生对象内部增加几个字段定义就行了,之前是用0和1表示动物的雄雌,接下来用整型常量MALE表示雄性的...,它们都在类的伴生对象中定义,外部可以通过类名直接访问该类的静态成员。...,相当于把这个嵌套类作为外部类的静态对象使用,在Activity中调用代码如下: package com.llw.kotlinstart import androidx.appcompat.app.AppCompatActivity

    1.2K20

    Kotlin 机制你都了解吗?

    在某个类中,如果某些成员变量没办法在一开始就初始化,并且又不想使用可空类型(也就是带?的类型)。那么,可以使用 lateinit 或者 by lazy 来修饰它。...伴生对象的总结 ---- 类似于 Java 中使用类访问静态成员的语法。因为 Kotlin 取消了 static 关键字,所以 Kotlin 引入伴生对象来弥补没有静态成员的不足。...可以使用 @JvmField 和 @JvmStatic 类似于 Java 中调用静态属性和静态方法; 伴生对象可以扩展属性和扩展方法。...首先伴生对象中的代码是在类加载时就会执行。init代码块中的方法会按顺序放在主构造函数中,主构造函数中原来的代码会在后面执行。 9. const 和 val 有什么区别?...如果这些函数中的任何一个在类体中显式定义或继承自其基类,则不会自动生成该函数。如果变量是 val 修饰,只会生成 get 方法。 11. 什么是 Range 操作符?

    80430

    阿里开源新一代单元测试 Mock 工具!

    通过公有方法间接测私有方法在很多情况下难以进行,开发者们更愿意通过修改方法可见性的办法来让原本私有的方法在测试用例中变得可测。...此外,在单元测试中时常会需要对被测对象进行特定的成员字段初始化,但有时由于被测类的构造方法限制,使得无法便捷的对这些字段进行赋值。...方法二:使用PrivateAccessor工具类 若不希望看到IDE的语法错误提醒,或是在非Java语言的JVM工程(譬如Kotlin语言)里,也可以借助PrivateAccessor工具类来直接访问私有成员...覆写任意类的方法调用 在测试类里定义一个有@MockMethod注解的普通方法,使它与需覆写的方法名称、参数、返回值类型完全一致,然后在其参数列表首位再增加一个类型为该方法原本所属对象类型的参数。...从功能的角度来说,虽然void方法不返回任何值,但它的执行一定会对外界产生某些潜在影响,我们将其称为方法的"副作用",比如: 初始化某些外部变量(私有成员变量或者全局静态变量) 在方法体内对外部对象实例进行赋值

    95620

    kotlin 之单例类详解

    lazyMan == null) { lazyMan = new LazyMan(); } return lazyMan; } } 优点:只有在使用时才会生成对象...事实上在JVM中大概做了3件事。 1.给lazyMan分配内存, 2.调用构造器来初始化成员变量 3.将lazyMan对象指向分配的内存空间。...但是JVM的即时编译器中存在指令重排序的优化,也就是说上面的第二步,第三步顺序是不 确定的一旦2,3,顺序乱了,这个是有一个线程调用了方法,结果虽然是非null,但是未初 始化,所以直接报错。...kotlin代码如下 转为Java之后 我们可以看到,该Model类转为Java代码之后,它是一个饿汉式单例。所以使用object的类采用的是饿汉式单例。...companion object伴生对象出现的单例是哪种类型的单例 kotlin代码如下 class Model{ companion object{ val text = ApiWrapper

    68130

    Scala

    1、Scala语言有什么特点?什么是函数式编程?有什么优点?   ...,具有以下几个特点:   1、自动添加与类名一致的构造函数(也就是伴生对象,通过apply方法实现),也就是说在构造对象的时候不需要使用new关键字   2、样本类中的参数默认是val关键字,不可以修改...7、scala中的伴生类和伴生对象是怎么一回事   在 Scala 中,每个类都可以有一个同名的伴生对象(companion object),用于存放静态方法和属性,或者说是类级别的方法和属性。...具体来说,一个类和它的伴生对象必须在同一个源文件中定义,并且它们的名称必须相同。   伴生类和伴生对象之间可以互相访问对方的私有成员。...也就是说,伴生对象可以访问伴生类的私有成员,伴生类也可以访问伴生对象的私有成员。

    19230
    领券