请问老师为什么,console.log(p.name);是undefind, window.Person = Person;不是已经暴露出去了吗

来源:3-5 私有属性和方法

慕田峪1427181

2022-05-13 15:39:11

 (function () {

            let name = '';

            class Person {

                constructor(usernam) {

                    name = usernam;

                }

                getName() {

                    return name;

                }

            }

            window.Person = Person;


        })();

        (function () {

            const p = new Person('Alex');

           

  console.log(p.name);

            console.log(p.usernam);

            console.log(p.getName());

        })();



写回答

1回答

好帮手慕星星

2022-05-13

同学你好, window.Person = Person;是暴露出去了,但是初始let定义的name是变量,constructor中name也没有用this定义,所以name属性不在Person类上,也就不在p上,可以输出p看看

https://img.mukewang.com/climg/627e0eb20905eab204240125.jpg

没有属性,只有原型上的getName方法

https://img.mukewang.com/climg/627e0ec809d19e6e03440106.jpg

所以p.name,p.usernam,实例上没有属性的值为undefined。而getName方法中返回的是name变量,Person实例化之后传入了Alex实参,所以usernam形参值为Alex,赋值后name变量的值也为Alex 。

祝学习愉快!

0

前端工程师

前端入门如同写字,如果你不知道从哪开始,那就选择前端(含Vue3.x,React17,TS)

20327 学习 · 17877 问题

查看课程