JS constructor探讨(二):再谈构造函数prototype.constructor的用途

在上篇文章《 JS constructor探讨(一):为什么要设置prototype.constructor?》中,我们发现prototype.constructor仅仅可以用于识别对象是由哪个构造函数初始化的,但在实践中,我们还有可能用到这个功能,并且还非常有用,比如Angular的控制器注册过程中,如果要为所有的Controller添加实例方法,并且要保持良好的封装性,还是比较困难的,如下:

 app.controller('AppCtrl', function($scope) {
    this.username = 'yiifaa';
    //  直接添加,必然会导致更多的内存空间
    this.getUsername = function() {
        return this.username;
    }
 });

如果直接在this上添加方法,显然每个Controller实例都会拥有独立的方法,从而浪费了大量的内存空间,并且也不符合javascript对象的设计原则。

这样的应用场景还有很多,那如何在不把方法拆出来的情况下,添加原型方法呢?这时不妨利用prototype.constructor属性,如下:

 app.controller('AppCtrl', function($scope) {
    this.username = 'yiifaa';
    //  通过constructor属性直接指向构造函数
    this.constructor.prototype.getUsername = function() {
        return this.username;
    }
 });

结论

我们利用constructor可以直接指向构造函数,从而不仅可以添加原型方法,还可以添加静态方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值