最后
面试题千万不要死记,一定要自己理解,用自己的方式表达出来,在这里预祝各位成功拿下自己心仪的offer。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
alert(this.name);
}
getName(); //“window”
obj.getName.call(window)
getName函数是一个单独函数(非某对象方法),所以创建后就归属到了window对象之下,调用时this指向window。
如果在一个函数前面加上new关键字来调用,那么就会创建一个连接到该函数的prototype成员的新对象,同时,this会被绑定到这个新对象上。这种情况下,这个函数就可以成为此对象的构造函数。例如:
function obj(){
this.name = “obj”;
}
var o = new obj();
alert(o.name); //“obj”
使用new创建对象o时,实际上,对象o就是obj.prototype ,只是上面还在new 时执行了构造函数绑定的name值
在JS中,函数也是对象,所有函数对象都有两个方法:apply和call,这两个方法可以让我们构建一个参数数组传递给调用函数,也允许我们改变this的值。例如:
var name = “window”;
var obj = {
name : “obj”
};
function getName(){
alert(this.name);
}
getName.apply(); //“window”
getName.apply(obj); //"obj
直接调用函数对象getName的apply方法,由于没有参数,所以被划归到了全局作用域中,this指向了window对象;
将getName函数在obj对象上调用,函数体内的this也就指向了obj对象;
var name = “window”;
function printName(){
alert(this.name);
}
var obj1 = {
name : “obj1”,
getName : printName
};
var obj2 = {
name : “obj2”,
getName : function(){
var func = obj1.getName;
func();
}
};
obj1.getName();
最后
面试题千万不要死记,一定要自己理解,用自己的方式表达出来,在这里预祝各位成功拿下自己心仪的offer。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
[外链图片转存中…(img-hT0lOJtA-1715064612924)]
[外链图片转存中…(img-MLGdYzTg-1715064612925)]
[外链图片转存中…(img-pY8CfJB2-1715064612926)]
[外链图片转存中…(img-wrojNb4H-1715064612926)]