【问题标题】:Javascript prototype , __proto__Javascript原型,__proto__
【发布时间】:2015-12-03 13:47:35
【问题描述】:

当我执行下面的 java 脚本代码时,我在“v.dummy();”处出现错误行,请告诉我我哪里做错了。

    function Test()
    {

    }

    Test.prototype.foo = function () {
        console.log('foo');
    }

    var v = new Test();

    v.foo();

    v.__proto__ = function dummy() {
        console.log('__proto__'); 
    };

    v.dummy(); // Uncaught TypeError: v.dummy is not a function

【问题讨论】:

    标签: javascript prototype


    【解决方案1】:

    __proto__ 只是一个对象的引用

    你不能让它等于一个新函数,但你可以这样做:

    v.__proto__.foo = function dummy(){}
    

    【讨论】:

      【解决方案2】:

      我不知道你想做什么,但是:

      1) 当您将函数分配给变量时,您可以省略名称 (dummy) 并使用匿名函数(没有名称)。在这种情况下,函数名称是无用的。 如果你这样做了

      var x = function y(){ ... }

      你可以这样称呼它:x(),而不是 y()

      2) __proto__ 应该是一个对象,而不是一个函数

      foo 的用法是正确的,因此它可以工作。

      您可能需要考虑阅读一本好的 JS 书籍。

      【讨论】:

      • 我做了以下更改,它起作用了 v.__proto__ = { dummy: function () { console.log('proto'); } };我的假设是函数也是 java 脚本中的一个对象。可能如你所说,我需要阅读 JS 好的部分。
      • @CleanCrispCode 是的,函数是js中的一个对象。在您的代码中,您可以使用v.__proto__() 调用您的函数。但你不应该这样做,因为__proto__ 是 javascript 使用的内部对象(用于搜索原型链以解析它在对象本身中找不到的方法)。关于原型还有很多可以说的,因此我推荐了一本书
      猜你喜欢
      • 2012-04-15
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多