JavaScript非原型链数组实例自定义方法myMethod运行逻辑咨询
myArray.myMethod 运行逻辑
先看完整实现代码:
const myArray = ['zero', 'one', 'two']; // 直接给当前数组实例添加自定义方法 myArray.myMethod = function (sProperty) { console.log(arguments.length > 0 ? this[sProperty] : this); };
运行逻辑分两种调用场景:
- 无参数调用
myArray.myMethod()时:方法内的this默认指向调用它的myArray实例,此时arguments.length为0,三元表达式返回this也就是数组本身,console.log会自动调用数组的toString()方法,输出zero,one,two - 传参调用
myArray.myMethod(1)时:arguments.length为1,三元表达式返回this[sProperty]即myArray[1],对应数组的第二个元素one,最终输出one
是否用到prototype
该实现完全没有用到prototype。
这里是直接给myArray这个单独的数组实例挂载自定义属性,方法仅属于这个实例,其他数组实例无法访问myMethod。如果是基于原型实现的写法,应该是修改构造函数的原型对象,比如Array.prototype.myMethod = function() {},这种写法会让所有数组实例都能调用myMethod。
内容的提问来源于stack exchange,提问作者Deepak Gupta
相关产品推荐
相关产品推荐

