Javascript学习---对象方法、this关键字

添加对象方法

方法也是对象的属性,我们可以创建一个函数并将它关联到对象中,如下:
let user = {
  name: "John",
  age: 30
};

user.sayHi = function() {
  alert("Hello!");
};

user.sayHi(); // Hello!

当然,我们也可以先声明函数再赋值,例如:
let user = {
  // ...
};

// first, declare
function sayHi() {
  alert("Hello!");
};

// then add as a method
user.sayHi = sayHi;

user.sayHi(); // Hello!

简写方式

如果键值对的声明方式比较繁琐,javascript提供了简写的语法,例如:
let user = {
  sayHi: function() {
    alert("Hello");
  }
};

// method shorthand looks better, right?
let user = {
  sayHi() { // same as "sayHi: function()"
    alert("Hello");
  }
};

this关键字

let user = {
  name: "John",
  age: 30,

  sayHi() {
    alert(this.name);
  }

};

user.sayHi(); // John
javascript中this关键字指向调用该方法的对象,也就是点号"."前的对象。如果只是声明一个函数并且函数体内使用this,调用的时候分为两种情况:第一种是在strict mode下,会报undefined;第二种是在non-strict node下,this会绑定浏览器的window对象(默认全局对象)。

内部:引用类型

看下面一个栗子:
let user = {
  name: "John",
  hi() { alert(this.name); }
}

// split getting and calling the method in two lines
let hi = user.hi;
hi(); // Error, because this is undefined
user.hi();  //work!
javascript在调用方法user.hi()时,通过user.hi返回一个引用类型,引用类型调用圆括号()获得对象方法的信息并绑定this所指的对象。如果像上述例子将user.hi赋值到hi变量中,此时就会丢失该引用类型,导致下边的hi()丢失this。所以在调用含有this关键字的方法时,应该采用 obj.method() 或者obj[method]()语法格式。


箭头函数没有this

例子:
let user = {
  firstName: "Ilya",
  sayHi() {
    let arrow = () => alert(this.firstName);
    arrow();
  }
};

user.sayHi(); // Ilya
箭头函数的this取决于外部环境,例子中arrow()是取决于sayHi()方法,而sayHi()的this来自user对象。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值