【问题标题】:JavaScript prototype delegation in function [duplicate]函数中的JavaScript原型委托[重复]
【发布时间】:2018-06-21 16:19:35
【问题描述】:

我正在尝试学习 Javascript,但我发现这个原型概念非常令人困惑,有人帮助我处理这段代码 sn-p

var func = function (){};
func.prototype = {m:9};

func.prototype.m; // That logs 9

func.m; // That logs undefined 

为什么委托在这种情况下不起作用?

【问题讨论】:

标签: javascript function object prototypal-inheritance delegation


【解决方案1】:

通过执行func.prototype = {m:9};,您将func 变量的'prototype' 属性设置为{m:9}

当您调用 func.m 时,您会尝试访问您以前从未设置过的 func 变量的 'm' 属性。

相反,您之前设置了对象 func.prototype'm' 属性。

如果您想从变量func 设置属性'm',只需执行func.m = 9;

【讨论】:

    【解决方案2】:

    你有一个构造函数,它的原型中有m

    var func = function (){};
    func.prototype = {m:9};
    
    console.log( func.prototype.m ); // That logs 9
    

    原型不是分配给函数本身,而是分配给由该函数创建的实例:

    var f = new func();
    
    console.log( f.m ); // That also logs 9
    

    这是您的m 所在的位置。

    为此还要记录 9

    func.m
    

    Function.prototype 中必须有 m,因为 func 的原型是 Function

    Function.prototype.m = 9;
    
    console.log( func.m ); // Logs 9
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      相关资源
      最近更新 更多