如何在JavaScript中自定义可访问调用对象属性的方法?
如何给JavaScript数组自定义
len方法/属性获取长度 嘿,我来帮你搞定这个问题!你想要给数组自定义一个能获取长度的len,其实核心是要搞清楚this的指向、原型的正确用法,还有你到底想把它做成需要调用的方法,还是像length一样直接访问的属性。先看看你原代码里的几个小问题:
- 你用了箭头函数:箭头函数没有自己的
this,它会继承外层作用域的this,所以这里根本拿不到调用它的数组对象,得换成普通函数才行。 - 错误引用了
prototype.length:你应该通过this来访问当前数组实例的length,而不是直接去拿原型上的length(那是数组构造函数原型的长度,不是当前数组的)。 - 调用方式不对:如果是方法,得加括号
arr.len();如果想直接像属性一样用arr.len,就得用getter来定义。
下面给你两种可行的实现方式:
方式一:自定义方法(需要调用)
这种方式是给数组原型添加一个方法,调用时加括号就能返回长度:
// 给Array的原型添加len方法 Array.prototype.len = function() { // this指向调用该方法的数组实例 return this.length; }; var arr = [1,6,3,5]; alert(arr.len()); // 弹出4
方式二:自定义访问器属性(和length用法一致)
如果你想完全模仿length的用法,不用加括号直接访问,可以用Object.defineProperty定义一个getter属性:
// 给Array原型添加len访问器属性 Object.defineProperty(Array.prototype, 'len', { get: function() { return this.length; } }); var arr = [1,6,3,5]; alert(arr.len); // 弹出4,和arr.length用法完全一样
小提醒
修改原生对象(比如Array)的原型要谨慎哦!如果你的项目里有其他库也修改了Array.prototype.len,就会产生冲突。如果是大型项目,更推荐封装一个工具函数,或者创建自己的数组子类来避免这类问题。
内容的提问来源于stack exchange,提问作者Nomeh Uchenna Gabriel
相关产品推荐
相关产品推荐

