|
在 JavaScript 中,类是语法糖,在我们的例子中,在原型链上界说了 Student 类中的 sayHello 要领。思量到每次我们建设 Student 类的实例时,城市将 sayHello 属性配置为该实例,使其成为返回字符串 Hello 的 function,因此我们永久不会行使原型链上界说的函数,也就永久不会看到动静 Hello from Student 。
3.工具可变性
思索以下环境中每个部门的输出:
- // situation 1
- const user = {
- name: 'John',
- surname: 'Doe'
- }
-
- user = {
- name: 'Mike'
- }
-
- console.log(user);
-
- // situation 2
- const user = {
- name: 'John',
- surname: 'Doe'
- }
-
- user.name = 'Mike';
- console.log(user.name);
-
- // situation 3
- const user = {
- name: 'John',
- surname: 'Doe'
- }
-
- const anotherUser = user;
- anotherUser.name = 'Mike';
- console.log(user.name);
-
- // situation 4
- const user = {
- name: 'John',
- surname: 'Doe',
- address: {
- street: 'My Street'
- }
- }
-
- Object.freeze(user);
-
- user.name = 'Mike';
- user.address.street = 'My Different Street';
- console.log(user.name);
- console.log(user.address.street);
声名
Situation 1: 正如我们在上一节中所相识的,我们试图从头分派不应承行使的 const 变量,以是将会获得范例错误。
节制台中的功效将表现以下文本:
- Uncaught TypeError: Assignment to constant variable
Situation 2: 在这种环境下,纵然我们改用要害字 const 声明的变量,也会有差异的举动。差异之处在于我们正在修改工具属性而不是其引用,这在 const 工具变量中是应承的。
节制台中的功效应为单词 Mike。
Situation 3: 通过将 user 分派给 anotherUser 变量,可以在它们之间共享引用或存储位置(假如你乐意)。换句话说,它们两个城市指向内存中的统一个工具,因以是变动一个工具的属性将反应另一个工具的变动。
节制台中的功效应为 Mike。
Situation 4: 在这里,我们行使 Object.freeze 要领来提供先前场景(Situation 3)所缺乏的成果。通过这个要领,我们可以“冻结”工具,从而不应承修改它的属性值。可是有一个题目!它只会举办浅冻结,这意味着它不会掩护深层属性的更新。这就是为什么我们可以或许对 street 属性举办变动,而 name 属性保持稳固的缘故起因。
节制台中的输出依次为 John 和 My Different Street 。
4.箭头函数
运行以下代码段后,将会输出什么以及缘故起因:
- const student = {
- school: 'My School',
- fullName: 'John Doe',
- printName: () => {
- console.log(this.fullName);
- },
- printSchool: function () {
- console.log(this.school);
- }
- };
-
- student.printName();
- student.printSchool();
声名
节制台中的输出将依次为 undefined 和 My School。
你也许会认识以下语法:
- var me = this;
- // or
- var self = this;
-
- // ...
- // ...
- // somewhere deep...
- // me.doSomething();
你可以把 me 或 self 变量视为父浸染域,该浸染域可用于在个中建设的每个嵌套函数。
当行使箭头函数时,这会自动完成,我们不再必要存储 this 引用来会见代码中更深的处所。箭头函数不绑定本身,而是从父浸染域担任一个箭头函数,这就是为什么在挪用 printName 函数后输出了 undefined 的缘故起因。
5.解构
请查察下面的烧毁信息,并答复将要输出的内容。给定的语法是否应承,不然会激发错误?
- const rawUser = {
- name: 'John',
- surname: 'Doe',
- email: 'john@doe.com',
- displayName: 'SuperCoolJohn',
- joined: '2016-05-05',
- image: 'path-to-the-image',
- followers: 45
- }
-
- let user = {}, userDetails = {};
- ({ name: user.name, surname: user.surname, ...userDetails } = rawUser);
-
- console.log(user);
- console.log(userDetails);
声名
尽量有点开箱即用,可是上面的语法是应承的,而且不会激发错误! 很整洁吧? (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|