javascript - 为什么我们在 JS 面向对象编程中使用 Prototype

标签 javascript prototypal-inheritance

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

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

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

Dog doberman = new Dog;

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

但是通过原型(prototype)我们做了这样的事情

var doberman = Object.create(dog);

我读到这些函数可以分离,并且可以通过原型(prototype)将它们添加到对象中。 请帮助我。我很困惑..

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

最佳答案

Now my question is why can't we just create objects like this: Dog dog = new Dog;

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

var doberman = new Dog( "Fenton" );

我明白这很令人困惑,因为 JavaScript 提供了许多不同的方法来完成(本质上)相同的事情,例如:

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

(尽管我的第一个示例创建了一个新的 object 实例,该实例使用 Dog 作为原型(prototype)(一种继承),而我的第二个示例创建了一个新的 object 实例仅具有不被继承的实例级属性,尽管由于 JavaScript 的鸭子类型,很少有差异很重要(尽管在高性能 JavaScript 中总是更喜欢原型(prototype)构造函数而不是实例级属性) .

关于javascript - 为什么我们在 JS 面向对象编程中使用 Prototype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33250738/

相关文章:

javascript - 在javascript中用闭包迭代时,你如何使用for循环 'continue'

javascript - 将 PHP 类对象传递给 Javascript 并在 Javascript 函数中访问其属性

javascript - Node.js - 同步操作中推荐的最长时间

javascript - JQuery - get(0) 未定义

javascript - Crockford 的伪经典继承部分中的函数构造函数

javascript - 如何在选择标签中添加虚线作为选项?

javascript类继承自Function类

php - PHP 中的原型(prototype)继承(类似于 JavaScript)

带有原型(prototype)的 Javascript 函数继承

javascript - 在类内部声明方法