【问题标题】:why we use Prototype in Object oriented programming in JS [duplicate]为什么我们在 JS 的面向对象编程中使用 Prototype [重复]
【发布时间】:2015-10-21 04:02:53
【问题描述】:

我是 Js OOp 的新手。 我在某处读到原型在OOPJS 中使用 好的,这是一个例子

function Dog(name) {
    this.name = name;
    this.age = age;
    this.bark = function() {
        console.log("Woof");
    }
}

现在我的问题是为什么我们不能像这样创建对象

Dog doberman = new Dog;

这会创建一个新的 Dog 对象。

但是通过原型我们可以做这样的事情

var doberman = Object.create(dog);

我读到功能可以分离,并且可以通过原型将它们添加到对象中。 请帮助我。我很困惑..

问题很简单 为什么对方法使用 Object.prototype?

【问题讨论】:

  • Prototype 允许您确保该类的任何对象将具有(至少最初)该属性(即变量、方法)。
  • JavaScript 没有输入,所以你不能使用Dog doberman = new Dog(),但你肯定可以使用var doberman = new Dog()
  • 用 JavaScript 编程时可以按空格键。
  • 注意原型还可以帮助分离对象的方法,这样就不会在每个实例中重新创建它们。

标签: javascript prototypal-inheritance


【解决方案1】:

现在我的问题是为什么我们不能像这样创建对象:Dog dog = new Dog;

事实上,你可以。您的 Dog 函数也可用作“构造函数”,如下所示:

var doberman = new Dog( "Fenton" );

我很欣赏这令人困惑,因为 JavaScript 提供了许多不同的方式来做(本质上)相同的事情,例如:

var doberman = { name: "Fenton", age: 5, bark: function() { return "woof"; } }

(虽然我的第一个示例创建了一个新的object 实例,它使用Dog 作为原型(一种继承),而我的第二个示例创建了一个新的object 实例,它只有实例级属性继承的,尽管由于 JavaScript 的鸭子类型,很少有区别很重要(尽管在高性能 JavaScript 中总是更喜欢原型构造函数而不是实例级属性)。

【讨论】:

  • 你的意思是我们也可以在没有原型的情况下在 Js 中做 OOP?那么它会影响性能,因为它们不是在每个实例中都重新创建的??
  • @MarcAndreJiacarrini 是的,你可以,尽管在方法上使用原型可以为每个实例节省内存。如果您没有太多实例,那么简单地不使用原型不会对您产生太大影响。
猜你喜欢
  • 2013-02-08
  • 2011-08-20
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2017-02-05
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多