JavaScript 面向对象

本文深入探讨JavaScript中对象创建的两种方式:使用构造函数和直接创建对象,并详细解释构造函数内部的this指向及返回值对全局作用域的影响。同时,介绍了arguments对象的使用场景,包括作为函数参数列表和函数递归中的应用。

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值