关于JS/TS的this对准问题(记录自己做错事)
原创前言
它的真正博主已经很久没有提及过它了。Ts代码, 所以最近我被这个基本问题搞糊涂了。
什么是this指针
在JavaScript在中创建函数, 系统隐式创建两个参数(1.this 2.arguments)
this重点是隐式关联调用函数的对象,我将在下面解释。
this据我所知,指针目前是, 分为四种情况
第一种:
函数方法通常被传递。"()"打电话,例如:twoSums(); 被称为twoSums方法, 在此功能中this指针指向window, 因为在这一点上,这个函数是。window A方法
第二种:
可以使用类中的方法。this指向调用此方法的所有者(对象)的属性。 如果被调用, 然后指向调用方对象。
第三种:
call(), apply() 自定义方法this指向
function getName(age,sex) {
console.log(this.name);
this.age = age;
this.sex = sex;
}
var jenny = { name : jenny };
getName.call(jenny,24,female);
getName.apply(jenny,[24,female]);
//jenny
可以看出,两种调用方法之间的唯一区别是传入参数的形式,call方法依次写入参数,而apply方法将所需传入函数的参数打包到一个数组中,并统一传递。
这两种方法所做的是,函数内部的隐式。this参数指向其第一个参数,并将下面的参数传递给函数,调用该函数。
因此,在这种情况下this指针指向call与apply方法指定的对象。
第四种
作为构造函数调用
function Person(name,age) {
this.name = name;
this.age = age;
}
var jenny = new Person(jenny,24);
console.log(jenny.name); //jenny
构造函数的返回值是构造函数范围内的对象。this指针的引用对象“函数上下文”。
至此, 一些结论引用文章:https://www.cnblogs.com/libinfs/p/5753560.html, 如有侵权,请联系 速删
个人遇到的问题
在我编写Ts时
原来这就是我写的
const Person = { age: 4 };
interface Comparable {
compareTo(b: any): number;
}
class MyObject implements Comparable {
age = 42;
compareTo(b: any): number {
console.log(this.age);
console.log(b.age);
if (this.age === b.age) {
return 0;
}
return this.age > b.age ? 1 : -1;
}
check(): void{
console.log(this.age);
}
}
const result = MyObject.prototype.compareTo(Person);
MyObject.prototype.check();
console.log(result);
此处获取 this.age 是 undefined, 因为没有对象调用此方法, 因为它在这里使用prototype在原型调用中, 所以这里 this.age只能 对其赋值 或者 操作, 没有办法获得它的价值。
正确的书写方式如下:
const Person = { age: 4 };
interface Comparable {
compareTo(b: any): number;
}
class MyObject implements Comparable {
age = 42;
// constructor(age: number){
// this.age = age;
// }
compareTo(b: any): number {
console.log(this.age);
console.log(b.age);
if (this.age === b.age) {
return 0;
}
return this.age > b.age ? 1 : -1;
}
check(): void{
console.log(this.age);
}
}
// var myObj = new MyObject(0);
var myObj = new MyObject();
const result = myObj.compareTo(Person);
myObj.check();
console.log(result);
这里有一个明确的声明。 一个对象 myObj, 所以this指向问题已解决 , 可直接获取age的值 42;
总结
事实上,这里的主要原因是我首先 写的是MyObj m = new MyObject(); 忘了这是Java用于声明对象的方法, 当时ts报错 我还想知道这怎么会很难做到, 后来,原型调用了该方法。 然后我忘了, 它开始挣扎this指出问题所在。
var myObj = new MyObject(); -> 这才是 ts 声明如何打开对象!
然而,这也是好的。在这个小问题的情况下, 让我回顾一下this的问题, 我希望大家看完后都能有所收获!
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123




