object的“偷梁换柱”

今天我们来设计一个业务类
还是那个news类,为了规范和业务代码统一性,我们往往胡要求做一些约定,比如有这样一个news类:


var news = {
    data(){
        return {id:101, title:'新闻标题'};
    },
};

// 然后我们可以这样访问
alert(news.data().id);

这个data()是强制规定的,是我们的一个规范。


var news = {
    data(){
        return {id:101, title:'新闻标题'};
    },

    methods:{
        show(){
            alert(this.data().id);
        }
    }
};

// 然后我们可以这样访问
news.methods.show();

我们通过news.methods.show()不能成功访问,会报

Uncaught TypeError: this.data is not a function(…)

因为show里的this并不是news对象本身,而是指methods
下面来改造一下:


var news = {
    data(){
        return {id:101, title:'新闻标题'};
    },

    methods:{
        show(){
            alert(this.id);
        }
    }
};

// 然后我们可以这样访问
Object.assign(news.methods, news.data());
news.methods.show();

Object.assign()可以把任意多个源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值