JavaScript向Array类中添加新方法(向原型链中添加方法)

某日突发奇想,想实现数组类的remove方法。

具体效果呢就是

var a = ["a", "b", "c", "d", "e"];
a.remove(2); //按照下标删除,返回被删除的元素"c"
console.log(a); //打印["a", "b", "d", "e"]

上网搜了许久搜到了如何移除数组元素,以及向类添加方法

以下代码能够实现功能,但是有个弊端,在使用for (... in ...)遍历数组的时候会将remove枚举出来。

//向Array原型链添加remove方法
Array.prototype.remove = function(index) {
	return this.splice(index,1)[0];
}

var arr = ["a", "b", "c", "d", "e"];
for (let item in arr) {
    console.log(item); //打印元素下标
}

/* 
    执行后控制台打印:
    1
    2
    3
    4
    5
    remove
*/

恰逢学习vue,(b站某网课)老师讲解vue数据劫持,举了个数据劫持的例子,可以用Object.defineProperty向对象动态添加属性,还能配置属性是否能被枚举/修改/删除

// 定义对象
let person = {
    name: "张三",
    sex: "男",
}

// 定义变量
let number = 22

Object.defineProperty(person, 'age', {
    //value: 18, //定义age属性的值
    enumerable: true, //定义age属性能否被枚举
    //writable: true, //定义age属性能否被修改
    configurable: true, //定义age属性能否被删除
    get(){ //定义age属性getter
        return number;
    },
    set(value){ //定义age属性setter
        console.log("赋值" + value);
        number = value;
    },
	//注意:不能同时有访问器(getter/setter) 与 value/writable 属性。
})

 经过整合,最终得到了如下代码(其他三个是顺手写的)

//移除数组中指定下标的元素,返回被删除的值(会修改原数组)
Object.defineProperty(Array.prototype, 'remove', {
	value: function(index) {
		return this.splice(index,1)[0];
	},
	enumerable: false, 
	writable: false, 
	configurable: true, 
});

//替换字符串所有中指定值(不会修改原字符串)
Object.defineProperty(String.prototype, 'replaceAll', {
	value: function(searchValue, replaceValue) {
		return this.split(searchValue).join(replaceValue);
	},
	enumerable: false, 
	writable: false, 
	configurable: true, 
});

//对字符串进行base64编码(不会修改原字符串)
Object.defineProperty(String.prototype, 'base64', {
	value: function(searchValue, replaceValue) {
		return btoa(unescape(encodeURIComponent(this)));
	},
	enumerable: false, 
	writable: false, 
	configurable: true, 
});

//对字符串进行base64解码(不会修改原字符串)
Object.defineProperty(String.prototype, 'debase64', {
	value: function(searchValue, replaceValue) {
		return decodeURIComponent(escape(atob(this)));
	},
	enumerable: false, 
	writable: false, 
	configurable: true, 
});
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值