猿问

关于function里的this问题

我是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>

Js


function AppViewModel() {

    this.firstName = ko.observable("Bert");

    this.lastName = ko.observable("Bertington");

    

    this.fullName = ko.computed(function(){

        return this.firstName() + " " + this.lastName();

    },this);

}


// Activates knockout.js

ko.applyBindings(new AppViewModel());


我有点不太理解fullName里function最后的this是什么作用,function的参数?还是别的?

它指向的是谁?该怎么可以透彻的理解这个语句?

我经常对匿名function(){}后面直接加参数这种行为理解不能,有没有什么好的文章介绍相关的内容?


谢谢大家


Qyouu
浏览 780回答 7
7回答

千巷猫影

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

桃花长相依

关于&nbsp;this,我已经在JavaScript 的 this 指向问题深度解析&nbsp;进行了详细的讲述,所以这里就不重复了。具体到这个问题,是关于&nbsp;ko.computed()&nbsp;的 API,看看从官方文档摘取的一段:Managing ‘this’The second parameter to&nbsp;ko.computed&nbsp;(the bit where we passed&nbsp;this&nbsp;in the above example) defines the value of&nbsp;this&nbsp;when evaluating the computed observable. Without passing it in, it would not have been possible to refer to&nbsp;this.firstName()&nbsp;or&nbsp;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&nbsp;this, but JavaScript does, because its functions themselves aren’t part of any object by default.)大致翻译一下第一句就是:ko.computed&nbsp;的第二个参数指定在执行 computed 观察函数时的&nbsp;this。所以在&nbsp;ko.computed(function() {...}, this)&nbsp;这里传入的&nbsp;this,就是在&nbsp;function() {...}&nbsp;使用的&nbsp;this,即&nbsp;this.firstName()&nbsp;和&nbsp;this.secondName()&nbsp;的那个&nbsp;this。也就是&nbsp;AppViewModel&nbsp;作用域中的&nbsp;this。

墨色风雨

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

四季花海

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

相关分类

JavaScript
我要回答