gpt4 book ai didi

javascript - 原型(prototype)如何在 javascript 中工作?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:46:05 24 4
gpt4 key购买 nike

我知道已经有问题了,但我必须说清楚。

function Animal(species) {
this.species = species;
}
Animal.prototype.getSpecies = function() {
return "Animal is " + this.species;
};


(function() {
var animal1 = new Animal("Snake");
var animal2 = new Animal("Wolf");
var animal3 = new Animal("Tiger");
}());

我是这么理解的。 enter image description here

函数/方法 getSpecies() 在原型(prototype)对象中的所有 Animal 对象之间共享。我理解正确吗?

_Proto_ 是指向原型(prototype)对象的指针是否正确?

感谢您的帮助。

最佳答案

是的,你是对的,这就是它的工作原理! 但是 __proto__ 不是一个指针,它是一个引用并且它的使用被描述了。在 Javascript 中,真正的指针不存在,但引用存在。

如果您像这样创建一个继承自 Animal 的类型:

function FastAnimal () {
Animal.call(this, 'extreme-fast');
}

FastAnimal.prototype = Object.create(Animal.prototype);
FastAnimal.prototype.constructor = FastAnimal;
FastAnimal.prototype.getSpeed = function () { return '1MILLION'; };


var fa = new FastAnimal();


fa.getName = function () {}

fa 中查找属性或方法将以这种方式进行:

  1. fa 是否有这个 OWN 属性(作为 getName)
  2. 是否存在于FastAnimal.prototype (getSpeed)
  3. 它是否存在于Animal

一般来说:只要有 prototype 在路上,这个查找就会继续。然而,这就是幕后发生的事情,称为原型(prototype)链。

注意:

如果您想遍历给定对象的属性,有两种方法:

for (var prop in obj) {
//do stuff
}

这包括原型(prototype)的属性,通常不是人们想要的,这就是为什么

for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
//do stuff
}
}

是一种常见的模式,但是有一种新型的循环即将出现,希望在不久的将来可以使用。

for (var prop of obj) {}

这个也明确排除了对象原型(prototype)的属性。

关于javascript - 原型(prototype)如何在 javascript 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28009867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com