日常--js
今天做了道题。 function Foo() { Foo.a = function() { console.log(1) } this.a = function() { console.log(2) } } Foo.prototype.a = function() { console.log(3) } Foo.a = function() { console.log(4) } Foo.a(); //4 let obj = new Foo(); obj.a(); //2 Foo.a(); //1 最后的结果还是有点迷惑。 obj.a()毋庸置疑就是2,因为obj是Foo的实例,所以会复制构造函数的属性。 但是Foo.a()的输出我有点疑惑。看解释说第一个Foo.a()是全局作用域里面找然后就是运行,从而打印出4.然后在new Foo();这个过程中,运行了Foo()内部的函数,第一条就是将全局的Foo.a覆盖成了打印出1的函数。那么问题来了: function foo() { a = function() { console.log(1) } } var a = function() { console.log(4) } a(); //4 foo(); a(); //1 这也是同类型的覆盖 var a = 1 function f() { var a = 2 } function y