JavaScript对象“this”方法
时间:2021-11-25 作者:匿名
对象方法,"this"
通常创建对象来表示真实世界中的实体,如用户和订单等:
let user = { name: "John", age: 30 };
并且,在现实世界中,用户可以进行 操作:从购物车中挑选某物、登录和注销等。
在 JavaScript 中,行为(action)由属性中的函数来表示。
方法示例
这里我们来做一个简单的带有函数的属性,作为对象属性的函数被称为 方法:
<!DOCTYPE html> <script> let user = { name: "John", age: 30 }; user.sayHi = function() { alert("你好!"); }; user.sayHi(); // 调用对象sayHi属性 弹出信息“你好!” </script>
这里我们使用函数表达式创建了一个函数,并将其指定给对象的 user.sayHi 属性。
我们可以看到,当我们调用user对象的sayHi属性的时候,执行了函数内部代码,弹出了你好信息。
当然,我们也可以使用预先声明的函数作为方法,就像这样:
let user = { // ... }; // 首先,声明函数 function sayHi() { alert("你好!"); }; // 然后将其作为一个方法添加 user.sayHi = sayHi; user.sayHi(); // 弹出 你好!
面向对象编程
当我们在代码中用对象表示实体时,就是所谓的 面向对象编程,简称为 “OOP”。
方法简写
在对象字面量中,有一种更短的(声明)方法的语法:
// 这些对象作用一样 user = { sayHi: function() { alert("你好"); } }; // 方法简写看起来更好,对吧? let user = { sayHi() { // 与 "sayHi: function()" 一样 alert("你好"); } };
如上所示,我们可以省略 "function",只写 sayHi()。
方法中的 “this”
通常,对象方法需要访问对象中存储的信息才能完成其工作。
this 的值就是在点之前的这个对象,即调用该方法的对象。
<!DOCTYPE html> <script> let user = { name: "John", age: 30, sayHi() { // "this" 指的是“当前的对象” alert(this.name); } }; user.sayHi(); // 输出name属性的值John </script>
“this” 不受限制
在 JavaScript 中,this 关键字与其他大多数编程语言中的不同。JavaScript 中的 this 可以用于任何函数,即使它不是对象的方法。
this 的值是在代码运行时计算出来的,它取决于代码上下文。
let user = { name: "John" }; let admin = { name: "Admin" }; function sayHi() { alert( this.name ); } // 在两个对象中使用相同的函数 user.f = sayHi;//弹出 John admin.f = sayHi;//弹出 Admin // 这两个调用有不同的 this 值 // 函数内部的 "this" 是“点符号前面”的那个对象 user.f(); // John(this == user) admin.f(); // Admin(this == admin) admin['f'](); // Admin(使用点符号或方括号语法来访问这个方法,都没有关系。)
在没有对象的情况下直接调用:this == undefined
function sayHi() { alert(this); } console.log ( sayHi() ); // console.log为在控制台输出记录 显示 undefined