我浪费了很多时间来寻找解决方案,但是......
我认为没有你想要的现有应用程序。JavaScript 是一种有点奇怪的语言。例如范围界定。很难检测到函数调用,因为很难检测到您当前的变量是否是其他变量的实例/克隆,也很难检测到原型中的更改。您有一个“类”,创建一个新实例,您只能更改这个新实例的属性。当然,“this”关键字可能是作用域的一个新问题。
一个例子。如果我重命名addNew
函数,也会重命名什么?
var Sample = function() {
this.values = [];
};
Sample.prototype.addNew = function(value) {
this.values.push(value);
};
var s = new Sample();
s.addNew("1");
var s2 = new Sample();
s2.addNew = function(value) {
this.values.push(parseInt(value, 10));
};
s2.addNew("12x");
Sample.prototype.addNewRaw = Sample.prototype.addNew;
Sample.prototype.addNew = function(value) {
this.values.push("x" + value);
};
var s3 = new Sample();
s3.addNew(12);
s3.addNewRaw(12);
console.log(s);
console.log(s2);
console.log(s3);
好的,这是一个糟糕的代码 :) 如果我的同事遇到了这个代码,我想,我会一直打到他们,直到他看起来像这个。是的,这是一个有趣的话题/问题,我认为“有可能并且可以使用吗?” 问题是我们需要问的第一个问题。当然可能,并且可以使用。
顺便说一句,我通常使用括号、sed、grep 和 jshint 并且也进行重构。