昨天压缩Js文件时发现了项目中的一个prototype的问题代码如下所示:
1.
<script> var XXX = function(){ }; var x1 = new XXX(); XXX.prototype.fnx = function(){ alert("123"); } x1.fnx(); </script>
2.
<script> var XXX = function(){ }; var x1 = new XXX(); XXX.prototype = { fnx: function () { alert("123"); } } x1.fnx(); </script>
实际情景的代码如上类似,在1中我们可以执行fnx方法,但2中我们却不行,问题就是出现在实例化后XXX的原型链方向已经改变。
代码1中XXX.prototype.fnx只是向原型链中加入一个方法,并不影响原型链的指向,而在代码2中是将原型链指向一个含有fnx方法的Object这样你之前实例化的对象原型链和当前的并无关系,所以无法执行fnx方法,如果在改变原型链指向之后实例化对象则会解决该问题。
希望广大码友注意类似问题!