2016-06-29 18 views
0

我试图覆盖数组上的push。我需要能够在重写之前调用原始的push方法,以便将元素推送到数组上。重写数组推送时调用原始方法

以下是我的代码。我在value方法中添加了list.push。我知道这是错误的,但我添加它来显示我正在尝试做什么。

let list = [ 
    'One', 
    'Two', 
    'Three' 
] 

Object.defineProperty(list, 'push', { 
    value: function(el) { 
    list.push(el) // I know this is wrong. Example of what I am trying to do. 
    } 
}) 
+0

这是一个坏主意来覆盖本地方法,无论是在原型或实例化对象 – ftor

+0

能否请您解释一下为什么它的一个坏主意,还有什么替代方案?这里是完整的代码:http://codepen.io/JamesTheHacker/pen/dXvdBb 我决定重写'push',因为在将一个元素推送到一个数组后,我想'push'来调用另一个方法。即当一个项目被推动时触发一个事件。 如果你有一个更好的替代方法,这是一个“更好”的方法来做到这一点,我很乐意听到它。谢谢。 – BugHunterUK

+1

@ LUH3417随时回答:http://stackoverflow.com/questions/38098876/why-is-it-a-bad-idea-to-override-native-methods – BugHunterUK

回答

3

调用与当前的对象作为背景原始原型实现:

Array.prototype.push.call(this, el) 
相关问题