它不会在控制台内的面向对象的JavaScript中显示“ this”对象

时间:2018-10-10 22:42:47

标签: javascript console.log

我正在关注面向对象的JavaScript教程,并且在控制台登录“ userOne.login”时遇到问题,希望看到“ ryu@ninjas.com已登录”,但最终看到

“ƒlogin(){console.log(this.email,'已经登录');   }“

似乎“此”没有收到电子邮件。我想知道为什么收到此消息。谢谢。

var userOne = {
  email:'ryu@ninjas.com',
  name:'Ryu',
  login(){
    console.log(this.email, 'has logged in');
  },
  logout(){
    console.log(this.email, 'has logged out');
  }
};
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Object Oriented JavaScript</title>
</head>
<body>

  <h1>Object Oriented JavaScript</h1>
    
</body>
</html>

3 个答案:

答案 0 :(得分:1)

这是一个相当快速的解决方案,只需在函数调用的末尾添加()。例如login()login引用了函数的定义,该函数实际上是链接到原型Function的对象。将功能作为功能主体运行的方法是使用括号进行调用。

答案 1 :(得分:1)

var userOne = {
  email:'ryu@ninjas.com',
  name:'Ryu',
  login: function(){
    console.log(this.email, 'has logged in');
  },
  logout: function(){
    console.log(this.email, 'has logged out');
  }
};

答案 2 :(得分:1)

您的语法略有不同;您需要为对象内的函数提供键,例如login: function()logout: function()。然后,您可以使用userOne.login()userOne.logout()调用这些功能:

var userOne = {
  email: 'ryu@ninjas.com',
  name: 'Ryu',
  login: function() {
    console.log(this.email, 'has logged in');
  },
  logout: function() {
    console.log(this.email, 'has logged out');
  }
};

userOne.login();
userOne.logout();
<h1>Object Oriented JavaScript</h1>

请注意,将函数存储在其相应对象中是首选方法,因为这些函数包含在对象的范围内,并且不会污染全局范围;您不能简单地致电login()