我似乎无法在单击事件中获得typescript类实例。
我有一个TypeScript类Navigation。
class Navigation
{
currentPage: number;
wireMouseEvents()
{
this.buttonPrevious.on("click", function(): void {
if (this.currentPage > 1)
{
// do more work with Navigation o
我对JavaScript中的作用域(主要是词法作用域)的确切工作方式有些困惑。我理解全局作用域中的变量可以在任何地方访问,在JavaScript中创建新作用域的唯一方法是创建函数(或在ES6中使用let )。然而,我并不真正理解什么是词法范围/意思。我在网上到处找遍了,找不到明确的解释。
我觉得我已经开始理解它了,但是让我和你确认一下,JavaScript巫师,以确保我是正确的。
因此,根据我的理解,词法作用域意味着静态作用域,因此,例如,函数的作用域不是由调用的位置创建的,而是由函数本身创建的位置创建的。下面的代码演示了这个概念:
var x = "global";
fun
为什么这里没有定义this?注销时,单击这是浏览器控制台TypeError: this is undefined中显示的错误 <script lang="ts">
import Vue from "vue";
import { getModule } from "vuex-module-decorators";
import Component from "vue-class-component";
import AuthModule from "@/store/auth";
import Store
我的目标是尝试将这个上下文从一个普通函数传递到一个箭头函数,但是我一直没有定义。
我知道,在正常函数中,这种行为是动态的,并且取决于函数是如何调用的。箭头函数中的这个函数遵循词法作用域规则来确定其值。但是,当我在第16行调用printWrapper()时,它被设置为car对象,因此当我进一步调用printThis()时,按照词法范围规则,它应该打印car对象,但在我的示例中,第2行上打印的这个对象是全局对象。
printThis = () => {
console.log(this); // prints the global object
}
var car = {
year
请考虑以下代码:
var obj = {
method : function(){
console.log( this ); // This prints the **obj** correctly
}
};
与Lambda的代码相同:
var obj = {
method : () => {
console.log( this ); // This prints **Window** object
};
};
为什么输出是不同的?
let student = {
fname: "Carlos",
lname: 'Dubón',
sayHi(){
alert(`Hi my name is ${this.fname}`);
},
sayBye: function() {
alert(`Bye ${this.fname}`);
},
sayHiAgain: ()=> {
alert(`Hi my name is ${this.fname}`);
}
}
student.
这是一个简单的规则来记住箭头函数中的this是什么吗?
var that = this;
setTimeout((a, b) => { ... }, 1000); // the arrow function (a, b) => { ... }
在这个箭头函数中,所有的this都可以被视为与that相同。
这是一个简单的规则来记住它是如何工作的吗?
当然,如果箭头函数中有任何常规的ES5函数,那么该ES5函数中的this与that不同,但将遵循旧的ES5方式。
更新:实际上,稍后,我发现考虑它的一个更好的方法可能是,只需将箭头函数想象为:
(function() { ... }).
我继续教我自己TypeScript和Angular2,我仍然讨厌它,但我必须持之以恒。总之,我有一个组件,它从REST服务加载JSON数据。这个JSON数据是一个非常复杂的数据,所以我希望分解它,在加载时,我希望将一些JSON分配给我定义的某种类型的数组。这是我喜欢的类型。我列出了我的用户去过的学校的信息.
export class UserSchool {
constructor (
public schoolId: number,
public yearRange: string,
publi