javascript - 了解 JavaScript 类方法和原型(prototype)

标签 javascript

第一个例子:

function Animal(name) {
    // Instance properties can be set on each instance of the class
    this.name = name;
    this.speak = function() {
        console.log("My name is " + this.name);
    }
}

var animal = new Animal('Petname1');
animal.speak();


function Cat(name) {
    Animal.call(this, name);
}

Cat.prototype = new Animal();

var cat = new Cat('Petname2');
console.log(cat.speak());

第二个例子:

function Animal(name) {
    // Instance properties can be set on each instance of the class
    this.name = name;
}

Animal.prototype.speak = function() {
    console.log("My name is " + this.name);
};

var animal = new Animal('Petname1');
animal.speak();


function Cat(name) {
    Animal.call(this, name);
}

Cat.prototype = new Animal();

var cat = new Cat('Petname2');
console.log(cat.speak());

在第一个示例中,我直接添加到类中,在第二个示例中,我通过 prototype 添加。有什么不同?输出是一样的。

最佳答案

首先你必须了解 new 如何在 Javascript 上工作以及这个 link对此有很好的解释。

基于此,两种方法之间的区别在于创建新动物和猫时创建的 speak 函数的数量。

第一种方法的 speak 函数的实例数与 CatAnimal 的实例数相同。然而,无论您实例化了多少只猫和动物,第二种方法都只有一个 speak 函数。查看以下片段。

在这个例子中,我们可以看到两个 Animal 实例的“说话”功能是不同的。

function Animal(name) {
    this.name = name;
    this.speak = function() {
        console.log("My name is " + this.name);
    }
}

var animalA = new Animal();
var animalB = new Animal();

animalA.speak === animalB.speak // false

分配给原型(prototype)我们可以看到两个实例是相同的。

function Animal(name) {
    this.name = name;
}

Animal.prototype.speak = function() {
    console.log("My name is " + this.name);
};

var animalA = new Animal();
var animalB = new Animal();

animalA.speak === animalB.speak // true

关于javascript - 了解 JavaScript 类方法和原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33178586/

相关文章:

JavaScript 类函数 this 运算符

javascript - 通过 AJAX 上传到 Azure 云存储的文件已损坏

javascript - 从异步加载的外部脚本中使用 jQuery 插件

javascript - JavaScript 中的一个错误

javascript - 在 Angular 指令中的对象上设置新属性以在 Controller 中使用

javascript - HTTP 拦截器中的 Angular HTTP

javascript - 为什么 CoffeeScript 将类定义包装在闭包中?

javascript - 从任意 HTML 表创建工具提示输出

javascript - 在 Angular 的同一页面上显示 View

javascript - 将 HTML 添加到自定义运输承运商/方法