javascript - 这两种在javascript中创建类的方法之间的区别

标签 javascript

这两种创建类的方式有什么区别:

var apple = {
    type: "macintosh",
    color: "red",
    getInfo: function () {
        return this.color + ' ' + this.type + ' apple';
    }
}

function Apple (type) {
    this.type = type;
    this.color = "red";
    this.getInfo = function() {
        return this.color + ' ' + this.type + ' apple';
    };
}

如何实例化和使用成员?

最佳答案

虽然 JavaScript 是一种面向对象的语言,但它不使用类。您不会在 JavaScript 中创建“类”。您创建一个“原型(prototype)”。 JavaScript 被认为是 Prototype-based language .

第一个示例称为“object-literal notation”,用于创建对象(其子集通常称为 JSON)。在基于类的语言中与此类比的是“静态”类,在这种情况下您不需要创建对象的新实例;一旦你定义它,它“就存在”。你不会实例化它,你会立即访问 apple 的成员,因为 apple 已经是一个对象。它也类似于在 Java 中创建匿名类。你会像这样使用它:

alert(apple.getInfo());

对于第二个示例,您正在创建一个原型(prototype)(不是类),它可用于实例化 Apple 类型的对象。你可以这样使用它:

var redDelicious = new Apple("Red Delicious");
alert(redDelicious.getInfo());

JavaScript 允许您修改和添加对象的原型(prototype),因此在声明您的 Apple 原型(prototype)后,您仍然可以继续添加或更改它的相关内容,如下所示:

Apple.prototype.size = "7cm";

当您这样做时,所有从 Apple 原型(prototype)派生的对象都将获得一个 size 字段。这是 PrototypeJS framework 的基础致力于修改 native JavaScript 对象以添加和修复功能。

请记住,修改原生 JavaScript 对象的原型(prototype)被认为是不好的做法,因此您应该尽可能避免这样做。

关于javascript - 这两种在javascript中创建类的方法之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2172861/

相关文章:

javascript - 如何影响传递给函数的字符串对象

javascript - 创建在任务列表中应用过滤器的方法

javascript - AngularJS $resource - 通过变量调用方法?

javascript - 有没有办法让我可以 console.log 一次?

javascript - 在javascript中创建一个多维数组

javascript - jQuery 点击如何?

javascript - 在 jQuery 中根据月份/季节更改样式表

javascript - 在 Javascript 中按值给出一系列目标的排名分数

javascript - 如果 'Accept-Language' 设置为英语以外的语言,则 Google map 中的标记位置错误

javascript - 使用 NVM 的 Vim 的 Tern JS