详谈js的call方法

在JavaScript中,callapplybindFunction对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向。今天,我把我所了解的记录下来,希望也能给初学者带来帮助!

1.call

语法:

call([thisObj[,arg1[, arg2[, [,.argN]]]]])

定义:调用一个对象的一个方法,以另一个对象替换当前对象。

说明: call 方法可以用来代替另一个对象调用一个方法。
call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

thisObj的取值有以下4种情况:
(1) 不传,或者传null,undefined, 函数中的this指向window对象
(2) 传递另一个函数的函数名,函数中的this指向这个函数的引用
(3) 传递字符串、数值或布尔类型等基础类型,函数中的this指向其对应的包装对象,如 String、Number、Boolean
(4) 传递一个对象,函数中的this指向这个对象

function a(){   
  console.log(this);   //输出函数a中的this对象
}       

function b(){}       

var c={name:"call"};    //定义对象c  

a.call();   //window
a.call(null);   //window
a.call(undefined);   //window
a.call(1);   //Number
a.call('');   //String
a.call(true);   //Boolean
a.call(b);   //function b(){}
a.call(c);   //Object
了解了上面这些过后,我们来个例子:
function class1(){   
  this.name=function(){   
    console.log("我是class1内的方法");   
  }   
}   
function class2(){ 
  class1.call(this);    
}   

var f=new class2();   
f.name();   
毫无疑问,控制台打印:
"我是class1内的方法"
但是,到这里可能有的童鞋就不是太明白了,到底是谁指向谁?

class1方法没什么好说的,我们来看class2,我看到有很多人包括一些知名博客都给出这样的解释:

class1.call(this);  //此行代码执行后,当前的this指向了class1(也可以说class2继承了class1)

我刚开始看到这样的解释,反正是一脸懵逼的状态,按照前面的定义,难道不是class1的this指向class2的this吗?实践出真知,于是把代码稍稍改一下,并运行如下:

function class1(){
   console.log(this);   // class2 {}
   console.log(this.bug);  // bug
   this.name = function(){
       console.log('我是class1内的方法');
    }
}

function class2(){
    this.bug = 'bug';
    class1.call(this);
}
var f=new class2();   
f.name();   // 我是class1内的方法
实践证明,我的想法还是正确的,class1的this指向class2的this,简单点说这两个this都是指向同一个地址,打印f如下:

所以f.name();  自然会打印"我是class1内的方法"。

知识图谱关系抽取是指从自然语言文本中提取实体之间的关系,并将其表示为知识图谱中的三元组形式。关系抽取是知识图谱构建的重要环节之一,其作用是自动化地从海量文本中构建知识图谱。 以下是几种常见的知识图谱关系抽取方法: 1. 基于规则的方法 基于规则的方法是指通过手工编写规则,从文本中提取实体之间的关系。这种方法需要大量的人工参与,并且需要不断更新规则以适应新的场景和语言。由于规则的复杂性和数量,这种方法通常只适用于特定的领域和任务。 2. 基于统计的方法 基于统计的方法是指使用机器学习算法从语料库中学习实体之间的关系。这种方法通常包括两个步骤:特征提取和分类器训练。特征提取是指从文本中提取与关系有关的特征,例如实体的词性、距离、共现频率等等。分类器训练是指使用机器学习算法训练一个分类器,用于判断两个实体之间是否存在关系。这种方法可以自动化地从大量文本中提取关系,并且可以适应新的场景和语言。 3. 基于神经网络的方法 基于神经网络的方法是指使用深度学习算法从文本中学习实体之间的关系。这种方法通常包括三个步骤:特征提取、表示学习和分类器训练。特征提取和分类器训练与基于统计的方法类似,但表示学习是神经网络方法的关键步骤。表示学习是指将实体和关系表示为高维向量,使得这些向量在语义上相似的实体和关系在向量空间中距离较近。这种方法在一些任务上取得了很好的效果,但需要大量的训练数据和计算资源。 以上是几种常见的知识图谱关系抽取方法,每种方法都有其优缺点和适用场景。在实际应用中,需要根据任务的具体需求和数据情况选择合适的方法
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值