第一篇博客,面试有感,希望能帮到大家,不会用图片,还希望能留言教我
《JavaScript高级程序设计》中关于this有如下示例:
var name="the window";
var object={
name:"My Object",
getName:function(){
return this.name;
}
}
采用下面三种方式调用object.getName()
object.getName(); //"My Object"\
(object.getName)(); //"My Object"
(object.getName=object.getName)(); //"the window";
书本里有解释,所以我就不解释了;
而我面试的公司出的是下面类型:
var a=10;
var obt={
a:20,
fn:function(){
var a=30;
console.log(this.a)
}
}
采用下面五种方式调用
obt.fn();
obt.fn.call();
(obt.fn)();
(obt.fn,obt.fn)();
new obt.fn();
上面五种操作会依次输出:
20,10,20,10,undefined
当时我只答出前三问,第一个不用说,第二个call()函数没有传入参数的情况下会把global作为作用域,第四个跟书本上的赋值操作应该差不多,this不能维持,所以返回全局作用域的a;
第五个是当时没答出来的,现在想想new操作会创建一个新的对象,然后将fn函数的作用域指向这个新对象,但是因为这个新对象没有a属性,所以输出undefined。