javascript中原型的含义

use*_*697 17 javascript

我写的继承的短代码reader来自Person:

<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>
Run Code Online (Sandbox Code Playgroud)

或者,我可以删除行 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>
Run Code Online (Sandbox Code Playgroud)

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

hvg*_*des 23

当您在原型上放置某些内容时,该对象的每个实例都共享该方法的相同代码.它们都使用相同的函数实例.

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

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

对于您的注释,如果您在对象的构造函数上放置一个方法,那么您实际上已经创建了一个"静态"方法.没有该对象的实例将具有该方法,它们都必须在构造函数上访问它.所以在你的情况下,Person.someMethod().