老师,模拟私有方法是怎么写呢?

老师,模拟私有方法是怎么写呢?

在外面声明了方法,在class内部怎么操作才能使它私有呢?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕久久 2022-10-28 10:44:53

同学你好,可以模拟私有属性,将方法私有化,例如:

 (function () {
        // 想让speak方法私有化,就把speak方法拿出来定义
        let speak = () => {
          console.log('speak');
        };

        class Person {
          constructor(username) {}

          // 类里面,定义一个其他方法,该方法中,可以调用speak
          speakCall() {
            speak();
          }
        }

        window.Person = Person;
      })();

      (function () {
        const p = new Person('Alex');
        //speakCall方法是可以调用的
        p.speakCall();
        // 但是speak方法就没法使用了,相当于私有化了
        console.log(p.speak);
      })();

方法的私有化相对麻烦些,简单了解上面的一种思路就行了。

祝学习愉快!

  • 提问者 张艺兴的宝贝 #1

    老师,不是私有化了吗?为什么直接p.speak()也能打印出结果呀?

    2022-10-28 16:03:02
  • 解答如下:

    1、直接调用p.speak()没有打印结果:

    https://img1.sycdn.imooc.com//climg/635b8f0009cfed7808670776.jpg

    https://img1.sycdn.imooc.com//climg/635b8f140982600508950176.jpg

    2、如果是如下这样写的,则会有输出:

    https://img1.sycdn.imooc.com//climg/635b8f32097d109007660170.jpg

    输出结果是undefined:

    https://img1.sycdn.imooc.com//climg/635b8f3909a6f2a206780125.jpg

    这个结果并不是函数本身,undefined说明p上没有speak方法,这是符合预期的。

    2022-10-28 16:14:09
  • 好的,谢谢老师

    2022-10-28 17:05:51
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师