前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >编写可维护代码4:不轻易修改对象方法

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

作者头像
前端_AWhile
发布2019-08-29 14:51:32
3180
发布2019-08-29 14:51:32
举报
文章被收录于专栏:前端一会前端一会

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

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

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

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

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

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

代码语言:javascript
复制
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。当为对象时,看如下参数写法:

代码语言:javascript
复制
var obj3 = Object.create(obj, {
        name: {
            value: 'sxm'
        }
    })
obj3.sayName(); //sxm

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

代码语言:javascript
复制
function Person(name, age){
    this.name = name;
    this.age = age;
}

var subPerson = new Person();

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

代码语言:javascript
复制
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
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端小二 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档