javascript - javascript中原型(prototype)的含义

标签 javascript

我写了从 Person 继承 reader 的简短代码:

<script>

/* Class Person. */
function Person(name) {
    this.name = name;
}

Person.prototype.getName = function() {
    return this.name;
}

var reader = new Person('John Smith');
alert(reader.getName());

</script>

或者我可以删除 Person.prototype.getName = function() { return this.name; 行} 并在 Person 对象中创建它。例如

<script>
/* Class Person. */
function Person(name) {
    this.name = name;
    this.getName = function() { return this.name;}
}

var reader = new Person('John Smith');
alert(reader.getName());

</script>

在这两种情况下调用 getName() 时我得到了相同的结果。那么它们有何不同?

最佳答案

当您在原型(prototype)上放置一些东西时,对象的每个实例都共享相同方法代码。它们都使用相同的函数实例。

当您简单地将一个方法放在 this 上时,每个对象实例都有其自己的相同方法的副本

使用 prototype 效率更高。请注意,这就是为什么通常将方法放在原型(prototype)上的原因,因为您通常希望所有实例都使用相同的方法,但将属性放在实例本身上,因为通常您不希望所有实例共享相同的属性。

对于您的评论,如果您将一个方法放在一个对象的构造函数上,那么您实际上已经创建了一个“静态”方法。对象的任何实例都不会有该方法,它们都必须在构造函数上访问它。所以在你的例子中,Person.someMethod()

关于javascript - javascript中原型(prototype)的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11541436/

相关文章:

javascript - .append() 时,Onclick 事件不起作用

javascript - 传递变量来确定连接

c# - 在 LoginError 事件上调用 Javascript 函数

javascript - 仅当存在另一个类时才添加类

javascript - HTML Canvas RGBA 描边

javascript - React Router 在客户端打印 react empty

javascript - 隐藏 MS CRM 表单中包含只读字段的部分

javascript - 使用 DOM 子项和数据传播进行更新

javascript - $j 不是函数

javascript - 查找不包括少数键的对象总和