js原型链问题

    Function.prototype.method1 = function(){
      console.log("function");
    }
    
    function func1(a,b,c){
      return a+b+c;
    }
    
    func1.method1();
    func1.method1.method1();

我的理解是:
fun1.method1(); 调用的是Function.prototype里的method1()方法。
func1.method1.method1();
不懂为什么 func1.method1 里能调用 method1()方法?

阅读 2.5k
4 个回答

JavaScript的世界里,函数也是对象,函数有一个包装对象Function

你在Function对象的原型上加了method1方法,那么,所有的函数的原型上都会有method1方法。

method1本身就是一个函数,也继承了原型链,所有func1.method1里也能调用method1方法

method1本身也是函数,也继承了原型链,自然可以调用.

func1.method1实际上就是Function.prototype.method1,Function.prototype.method1被你写成了一个function 自然就是Funtion的实例,有method1方法。

func1.method1.method1.method1.method1.method1.method1()
//无限循环

JavaScript 中,所有函数都是 Function 的实例,Function 原型上的方法当然会继承到其下所有的实例了。而这门语言的函数也比较特殊,准确说应该叫“函数对象”,它同时拥有 prototype 和 proto 两个属性,因此其原型链上的继承可以发生循环引用。
从这里也能窥见一些闭包的原理——作用域链。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题