为了账号安全,请及时绑定邮箱和手机立即绑定

关于function里的this问题

关于function里的this问题

Qyouu 2019-03-21 15:19:37
我是js新人,这是knockout.js里的一個示例html<p>First name: <input data-bind="value: firstName" /></p><p>Last name: <input data-bind="value: lastName" /></p><p>Full name: <strong data-bind="text: fullName"></strong></p>Jsfunction AppViewModel() {    this.firstName = ko.observable("Bert");    this.lastName = ko.observable("Bertington");        this.fullName = ko.computed(function(){        return this.firstName() + " " + this.lastName();    },this);}// Activates knockout.jsko.applyBindings(new AppViewModel());我有点不太理解fullName里function最后的this是什么作用,function的参数?还是别的?它指向的是谁?该怎么可以透彻的理解这个语句?我经常对匿名function(){}后面直接加参数这种行为理解不能,有没有什么好的文章介绍相关的内容?谢谢大家
查看完整描述

7 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

兄弟那个函数叫自执行函数 格式为(function(){})()这是一般格式 现在有es6了 所以也可以写成: 
(()=>{})()箭头函数。 至于你说的有关于this指向的问题,我觉得这个你得先系统的去学this有指向window的,也有指向当前对象的,还有指向当前函数的,在回调函数中的this指向window。

查看完整回答
反对 回复 2019-04-08
?
桃花长相依

TA贡献1860条经验 获得超8个赞

关于 this,我已经在JavaScript 的 this 指向问题深度解析 进行了详细的讲述,所以这里就不重复了。

具体到这个问题,是关于 ko.computed() 的 API,看看从官方文档摘取的一段:

Managing ‘this’

The second parameter to ko.computed (the bit where we passed this in the above example) defines the value of this when evaluating the computed observable. Without passing it in, it would not have been possible to refer to this.firstName() or this.lastName(). Experienced JavaScript coders will regard this as obvious, but if you’re still getting to know JavaScript it might seem strange. (Languages like C# and Java never expect the programmer to set a value for this, but JavaScript does, because its functions themselves aren’t part of any object by default.)

大致翻译一下第一句就是:ko.computed 的第二个参数指定在执行 computed 观察函数时的 this

所以在 ko.computed(function() {...}, this) 这里传入的 this,就是在 function() {...} 使用的 this,即 this.firstName() 和 this.secondName() 的那个 this。也就是 AppViewModel 作用域中的 this


查看完整回答
反对 回复 2019-04-08
?
墨色风雨

TA贡献1853条经验 获得超6个赞

这里是指向实体对象的
而且这里AppViewModel其实是定义了一个类似类的东西,它可以new出一个对象来,这个对象就可以有具体的一些属性了。

查看完整回答
反对 回复 2019-04-08
?
四季花海

TA贡献1811条经验 获得超5个赞

我回一个没有文档时怎么判断吧,毕竟this和函数call apply bind也有关
一个debugger就知道了
this.__proto__ === ko.constructor.prototype;
this.__proto__ === AppViewModel.prototype;

查看完整回答
反对 回复 2019-04-08
  • 7 回答
  • 0 关注
  • 779 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信