【问题标题】:difference between prototype being assigned an object literal vs function [duplicate]原型被分配对象文字与函数之间的区别[重复]
【发布时间】:2015-05-30 19:51:14
【问题描述】:

我在网上发现这篇文章让我很困惑。

http://jonathancreamer.com/object-literals-and-prototypes-in-javascript/

当我运行以下代码时

case2:
Pizza.prototype = {
    divvyUp: function () {
        return this.type  + " pizza which has " + this.slices +" slices";
    }
};

Versus case1:

Pizza.prototype.divvyUp = function () {
    return this.type  + " pizza which has " + this.slices +" slices";
};

难题在于,尽管 case1: 中的 Pizza.prototype.constructor 是构造函数,而 case2: 中的 Pizza.prototype.constrcutor 是 object() 函数,而 case2: 解耦了继承链。但是为什么当我执行 sausagePizza.divvyUp() 对于这两种情况我得到相同的结果。但是,当 case2: 解耦继承链并且不再引用 Pizza() 构造函数时,为什么我会得到类似于 case1 的 case2 的结果

【问题讨论】:

标签: javascript


【解决方案1】:

前者会将整个 prototype 替换为包含单个函数的对象 - divvyUp

后者会修改现有的prototype,添加(或替换)函数divvyUp

试试

console.log(Pizza.prototype);

在每个之后,看一看。

【讨论】:

  • 当我写 console.log(Pizza,prototype);在这两种情况下,答案都是 [object Object] 但是当我编写 Pizza.prototype.constructor (case:1 给我整个 Pizza() 构造函数和 case2: 把函数 Object(){ [native code] } 交给我时。还是一头雾水。
  • 看到[object Object] 意味着您记录的任何内容都已以某种方式转换为字符串...
  • 您确定您的案件处理方式正确吗?用对象文字替换 xxx.prototype 应该是 xxx.prototype.constructor === Object(),而修改现有的应该保持原样,这与您所描述的完全相反。
  • 很高兴我能帮上忙 :)
猜你喜欢
  • 2013-01-26
  • 2015-05-15
  • 2016-04-20
  • 2021-02-12
  • 2021-01-26
  • 2017-07-16
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
相关资源
最近更新 更多