js构造函数与实例关系;闭包

1.一个构造函数如下:(构造函数规范是首字母大写,内部使用this定义属性方法)

function Person(){
this.name='a';
this.job={s:'e'};
this.func=function(){return 'eee';}
};
var a1 = new Person();
console.log(a1);
a1.job.s='t';
var b1 = new Person();
console.log(b1);

以上代码构建了一个类Person,创建了两个他的实例,其中一个实例修改job对象,然后新建b1输出,b1的job是什么呢,答案是{s:'e'};所以构造函数Person并没有受到实例的影响。
可以使用prototype来放需要做公共属性的内容,(常说的原型指的就是A.prototype),例子如下:

function Person(){this.name='a';
this.job={s:'e'};
this.func=function(){return 'eee';}};
Person.prototype.aa = {e:'r'};
var a1 = new Person();
console.log(a1);
a1.aa.e='t';
var b1 = new Person();
console.log(b1.aa);
//b1.aa输出{e:'t'};

因为prototype是公共属性容器,所以实例均可修改其中的属性内容,b1访问属性aa,已经被a1修改过了。
2.闭包:
闭包是指有权访问另一个函数作用域变量的函数,创建闭包的通常方式,是在一个函数内部创建另一个函数。

function A(){
        var x = 1;
        return function(){
            x++;
            console.log(x);
        }
    }
    var m1 = A();//第一次执行A函数
    m1();//2
    m1();//3
    var m2 = A();//第二次执行A函数
    m2();//2
    m1();//4

返回的函数使用了A()的变量,所以变量不会被回收,保留在内存中,下次调用返回的函数就会返回x的加一结果了;
新运行A()返回新的对象,所以两个m1,m2并不会相互影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值