它不在控制台内以面向对象 JavaScript 显示 "this" 个对象

It does not show "this" objects in object oriented JavaScript inside Console

我正在学习面向对象 JavaScript 教程,但在控制台日志 "userOne.login" 时遇到问题,希望看到 "ryu@ninjas.com has logged in" 但最终看到

"ƒ login(){console.log(this.email, 'has logged in'); }"

"this" 好像没有收到邮件。我想知道为什么我会收到这条消息。谢谢。

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>

这是一个相当快速的修复方法,只需将 () 添加到函数调用的末尾即可。例如 login()login 引用函数的定义,它实际上是一个链接到原型 Function 的对象。 运行 函数作为功能体的方法是用括号调用它。

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');
  }
};

你的语法有点不对;您需要在对象中为函数指定一个键,例如 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().