程序运行到某一步的环境可以看作是上下文,作用域表示的是使用的范围
nodejs通过call方法改变上下文
来个小例子
var pet={
words:'...',
speak:function(say){
console.log(say+' '+this.words)
}
}
// pet.speak('Speak')
var dog={
words:'wang'
}
// 通过call改变上下文
// 把speak的上下文切换成dog的
pet.speak.call(dog,'speak')
如注释,通过call()方法把speak方法的上下文切换到dog,并且传入了一个参数“speak”,输出结果是 speak wang,而不是 speak ...
/**************** extends ******************************/
前面是要用到才调用speak方法,也可以dog继承pet的speak方法
function pet(words){
this.words=words
this.speak=function(){
console.log(this.words)
}
}
function dog(words){
pet.call(this,words)
//pet.apply(this,arguments)
}
var dog = new dog('wang')
dog.speak()
通过call方法把pet的上下文切换到this(就是dog)中,dog就继承了pet的方法,dog就可以调用speak()方法