javascript 类变量的实现

代码如下:

function echo(){
    for(let i=0;i<arguments.length;i++)
        console.log(arguments[i]);
}

function extend(o, p){
	for (prop in p) {
		o[prop] = p[prop]
	}
	return o;
}

function People(name,age){
    //在产生第一个实例的时候初始化类变量,同时重新指定了__proto__,使得拥有了一个count属性,好处是修改不扩散到Function.prototype,坏处是原型发生了变化,可能失去继承关系,在多层继承的时候不可用。
    if(People.count===undefined){
        _count=0;
        People.__proto__={
            get count(){return a()},
            set count(n){_count=n}}
    }
    //使得局部变量成为自由变量,实现记忆功能
    function a(){return _count}
    //下面语句实现父类属性向子类的传播
    extend(People.prototype, People.__proto__)
    //下面语句实现子类和父类的静态变量的 双向绑定
    Object.defineProperty(this,'count',
                    {
                        get: function(){return a()},
                        set: function(n){_count=n}
                    })
    echo("新建第"+_count+"实例")
    _count++
}



a=new People("a",1)
b=new People("a",1)
echo(People.count)
c=new People("a",1)
echo(a.count)
a.count=8
echo("修改实例的count为8")
echo("类的counts属性变为")
echo(People.count)
echo("修改类的count为10")
echo("实例的counts属性变为")
People.count=10
echo(a.count)
d=new People("a",1)
echo(a.count)
//People.count=1

转载于:https://my.oschina.net/backbye/blog/1857579

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值