1.通过函数创建类
case 1 : new function_name();
var t1 = 'ttt';
function aaa()
{
this.t1 = '222';
}
var a = new aaa();
console.log(t1); //ttt
case 2:function_name(); 如果忘记了new会怎么样呢?
当程序的宿主环境是Web浏览器时,它所提供的全局对象就是window。
aaa没有被任何对象调用,则函数中this就是window了
var t1 = 'ttt';//加不加这行,不影响结果
function aaa()
{
this.t1 = '222'; //改变全局变量,这时候的this为全局
}
var a = aaa();
console.log(t1); //222
//和console.log(window.t1)等价
case3:函数的返回值
在这里其实和case1一样,会创建aaa函数的对象,因此不会改变全局t1的值,但是aaa有return,返回了一个新的对象。如果aaa没有return,new方法默认的返回为this
var t1 = 'ttt';
function aaa()
{
this.t1 = '222';
return {
b:2
};
}
var a = new aaa();
console.log(t1); //ttt
2.对于每个对象都会默认被加上constructor属性
case1:带参构造函数
var t1 = 'ttt';
function aaa(name)
{
this.t1 = name;
}
var a = new aaa('222');
console.log(a.constructor); //aaa(name)
case2:无参构造函数
var aaa={}
console.log(a.constructor); //Object(),通过json方式创建的,构造函数都是Object()
3.arguments
case1:作为函数的参数列表数组
function f()
{
return arguments;
}
console.log(f(1,2,3));//[1,2,3]
case2:arguments.callee 返回函数本身,做匿名函数的递归时有用
(function(count)
{
if(count<5)
{
alert(count);
arguments.callee(++count);
}
})(1);