博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js方法-this
阅读量:4930 次
发布时间:2019-06-11

本文共 1241 字,大约阅读时间需要 4 分钟。

var xiaoming = {    name: '小明',    birth: 1990,    age: function () {        var y = new Date().getFullYear();        return y - this.birth;    }};xiaoming.age; // function xiaoming.age()xiaoming.age(); // 今年调用是25,明年调用就变成26了

在一个方法内部,this是一个特殊变量,它始终指向当前对象,也就是xiaoming这个变量。所以,this.birth可以拿到xiaomingbirth属性。

 

function getAge() {    var y = new Date().getFullYear();    return y - this.birth;}var xiaoming = {    name: '小明',    birth: 1990,    age: getAge};xiaoming.age(); // 25, 正常结果getAge(); // NaN

单独调用函数getAge()怎么返回了NaN?请注意,我们已经进入到了JavaScript的一个大坑里。

JavaScript的函数内部如果调用了this,那么这个this到底指向谁?

答案是,视情况而定!

如果以对象的方法形式调用,比如xiaoming.age(),该函数的this指向被调用的对象,也就是xiaoming,这是符合我们预期的。

如果单独调用函数,比如getAge(),此时,该函数的this指向全局对象,也就是window

 

 

var fn = xiaoming.age; // 先拿到xiaoming的age函数fn(); // NaN

要保证this指向正确,必须用obj.xxx()的形式调用!

 

 

 

'use strict';var xiaoming = {    name: '小明',    birth: 1990,    age: function () {        var that = this; // 在方法内部一开始就捕获this        function getAgeFromBirth() {            var y = new Date().getFullYear();            return y - that.birth; // 用that而不是this        }        return getAgeFromBirth();    }};xiaoming.age(); // 25

var that = this;,你就可以放心地在方法内部定义其他函数,而不是把所有语句都堆到一个方法中。

 

转载于:https://www.cnblogs.com/xiaoxiaof/p/9778763.html

你可能感兴趣的文章
CSS 伪元素
查看>>
Asp.net IsPostBack
查看>>
ASP.NET MVC使用Ninject
查看>>
Android透明无边框圆形进度条之最简单实现
查看>>
Dynamics CRM2016 Web API之Expand related entities & $ref & $count
查看>>
MEF 编程指南(八):过滤目录
查看>>
css样式中position和_position的区别
查看>>
hdu 3065 病毒侵袭持续中 AC自动机
查看>>
ajax返回json数据示例
查看>>
DAY9 函数初识(各种参数的用法)
查看>>
9-19练习
查看>>
【zz】贝叶斯推断及其互联网应用
查看>>
看看我做的一款 时间轴 插件 timegliderJs
查看>>
哈希表的构造方法
查看>>
设计包含min函数的栈
查看>>
在Outlook中用VBA导出HTML格式邮件
查看>>
BeanUtils String转Date注册器
查看>>
获得进程/线程已经被分配的所有cpu时间片的总和
查看>>
spark-submit常用参数
查看>>
【西北师大-19软工】第十三、十四次作业汇总暨期末总结
查看>>