杂症5-函数转载

原创
小哥 3年前 (2022-10-17) 阅读数 49 #大杂烩

题目:

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(); let obj = new Foo(); obj.a(); Foo.a();

解析:

输出顺序是输出顺序是 4 2 1 .

function Foo() { Foo.a = function() { console.log(1) } this.a = function() { console.log(2) } } // 以上只是 Foo 方法时,不会生成任何实例,并且此时不会执行 Foo.prototype.a = function() { console.log(3) } // 现在在 Foo 原型方法安装在原型方法上,原型方法安装在原型方法上,原型方法安装在 a 方法的输出值是方法的输出值是 3 Foo.a = function() { console.log(4) } // 现在在 Foo 直接法安装在直接法上直接法安装在直接法上 a ,则输出值为输出值IS,且输出值为 4 Foo.a(); // 立即执行立即执行 Foo 上的 a 刚刚定义的方法,所以方法,所以方法,所以 // # 输出 4 let obj = new Foo(); /* 这里,对HERE的调用是向 Foo 施工方法。浅谈地下连续墙施工方法Foo 构造方法主要做两件事。构造方法主要做两件事。

  1. 将全局的 Foo 关于直接法的直接法 a 替换为输出替换为输出 1 的方法。
  2. 在新对象上挂载直接方法在新对象上挂载直接方法在新对象上挂载直接方法 a ,则输出值为输出值IS,且输出值为 2。 */

obj.a(); // 因为有直接方法因为有直接方法 a 不需要访问原型链,因此按照构建方法中的定义使用它 this.a, // # 输出 2 Foo.a(); // 已在生成方法中替换为全局 Foo 上的 a 方法,所以方法,所以方法,所以 // # 输出 1

转载于:https://www.cnblogs.com/anbozhu7/p/11303132.html

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门