在JS中我们经常听到一句话就是:万物皆对象,一个变量是一个对象,一个函数是一个对象等等…而在这里面,函数与对象的关系又很微妙,请先思考一句话:对象都是由函数创建的,这句话是对的还是错的?
首先我们先看一个小例子:
function Fn() {
this.name = '王福朋';
this.year = 1988;
}
var fn1 = new Fn();
上面这个例子很简单,它说明对象可以通过函数来创建,但是不是所有对象都是由函数创建的呢?可能有人会说不对!我们平时声明对象不还有其他方式嘛,比如:
var obj = { a: 10, b: 20 };
var arr = [5, 'x', true];
但是不好意思,这个真的只是一种“快捷方式”,在编程语言中,一般称之为“语法糖”。 话归正传——其实以上代码的本质是:
var obj = new Object();
obj.a = 10;
obj.b = 20;
var arr = new Array();
arr[0] = 5;
arr[1] = 'x';
arr[2] = true;
而其中的 Object 和 Array 都是函数:
console.log(typeof (Object));
console.log(typeof (Array));
所以,对象都是通过函数来创建的这句话是正确的!不过还有一个值得注意的点是: 假如给函数添加的属性也是一个函数,那么这个属性函数的this指向的是原函数,而不是window
var a = function(){
console.log("这是a函数");
}
a.fn = function(){
this();
}
a.fn()
|