编写可维护代码4:不轻易修改对象方法

编写可维护的代码规则第4篇。

本篇主要讲下对象的属性与方法的修改问题。由于js中修改对象的属性和方法简直容易至极,所以任何人都可以更改js中的具有可访问可修改权限的对象。这就带来极大的风险,容易造成各种奇葩的bug问题且难以排查,更别说如果是多人协同开发的情况下,某个人改动已有方法时,一旦产生bug,且被其他维护,那找起问题根源的麻烦程度简直是想要杀人的。

所以为了人生财产安全,在js维护时,个人是不建议对已有对象方法属性进行修改、删除的,除非你是对象的所有者,了如指掌。

通常对于对象想要修改或新增或删除方法属性时,建议是继承个新对象出来,新对象拥有被继承对象的所有属性和方法,且不会影响到原对象在源码中的使用。

js中的继承有两种:基于对象的继承和基于类型的继承。

基于对象的继承,可以使用Object.create()方法。

var obj = {
    name: 'nitx',
    sayName: function(){
        console.log(this.name);
    }
}
var obj2 = Object.create(obj);
obj2.sayName();     //nitx

//当obj2重新定义sayName()方法时,不会影响到被继承对象中的方法
obj2.sayName = function(){
    console.log('her name is sxm.');
}
obj2.sayName();     //her name is sxm.
obj.sayName();      // nitx

Object.create()方法还可以传入第2个参数,该参数对象中的属性和方法将添加新对象中去。需要注意的是,第2个参数是一个对象或null。当为对象时,看如下参数写法:

var obj3 = Object.create(obj, {
        name: {
            value: 'sxm'
        }
    })
obj3.sayName(); //sxm

而基于类型的继承,类似基于对象的继承,都是从一个已经存在的对象中继承,区别在于这里的继承是依赖原型的。因此,基于类型的继承是通过构造函数实现的,而非对象。具体实践:

function Person(name, age){
    this.name = name;
    this.age = age;
}

var subPerson = new Person();

这种继承,应该说更官方。也是ES6中的class继承的原始版本。复习下现在class的继承:

class Person{
    constructor(name, age){
        this.name = name;
        this.age = age;
    }
    sayName() {
        console.log(this.name);
    }
}

class Student extends Person{
    constructor(name, age, score){
        super(name, age);
        this.score = score;
    }
}

var s = new Student('nitx', '30', 'A');
s.sayName();    //nitx

喜欢本文请扫下方二维码,关注微信公众号: 前端小二,查看更多我写的文章哦,多谢支持。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值