🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
~~~ function Foo() { getName = function () { //这个米有this,和实例没有关系 console.log(1); }; return this; } Foo.getName = function BBB() { // 把Foo当成对象,加了getName这样一个属性 console.log(2); }; Foo.prototype.getName = function AAA() { //当做类供实例使用,公共方法 console.log(3); }; var getName = function () { //普通的函数 console.log(4); }; function getName() { //普通的函数 console.log(5); } Foo.getName();//=>2 把Foo当做一个对象,找Foo的私有方法执行 getName();//=>4 执行全局下的GET-NAME Foo().getName();//=>1 因为没有new ,先把FOO当做普通函数执行, 和prototype没有关系,和属性没有关系。 执行返回的结果在调取GET-NAME执行 getName();//=>1 执行的依然是全局下的GET-NAME <================================================================> console.log(new Foo.getName());;//=>A:(Foo.getName) =>new A() =>2 new 当做类来弄,new 整体Foo.getName() new Foo().getName();//=>B:new Foo() =>B.getName() =>3 new整体new Foo() <================================================================> console.log(new new Foo().getName()); //=>C:new Foo() =>new C[Foo的实例].getName() =>D:C.getName =>new D(); =>3 (先计算new Foo()创建一个实例f,然后new f.getName(), 先找到f.getName,在把这个函数new一下, 最后其实相当于把f.getName当做一个类,返回这个类的一个实例) ~~~ ![](https://img.kancloud.cn/ba/b8/bab87aa3cd86e85c6156db4617716214_1974x1040.png) ![](https://img.kancloud.cn/c6/1b/c61b992761fec236bced02e1cb9cb02c_1171x462.png) <================================================================> ![](https://img.kancloud.cn/9d/cd/9dcddf1f548200beb77b9c46c02515b6_886x630.png) ![](https://img.kancloud.cn/5c/36/5c3660d27d2b946022f72e0b7f64eccb_828x635.png) ![](https://img.kancloud.cn/71/91/719198902e019a72f8b4ed4917164dd1_824x417.png)