我知道已经存在问题,但我必须明确这一点。
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");
}());
这就是我的理解。
函数/方法getSpecies()在原型对象中的所有Animal对象之间共享。 我理解正确吗?
说_Proto_
是指向原型对象的指针是否正确?
感谢您的帮助。
答案 0 :(得分:6)
是的,你是对的,这就是它的工作原理! 但是 __proto__
不是指针,它是一个引用,它的使用是被删除的。在Javascript中,实际指针不存在,但引用确实存在。
如果你创建一个继承自Animal的Type:
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
中查找属性或方法的方法就是这样:
fa
是否拥有此OWN属性(作为getName)FastAnimal.prototype
(getSpeed)Animal
一般情况下:只要路上有prototype
,此查询就会继续。然而,这就是在引擎盖下发生的事情并称之为原型链。
N.B:
如果您想循环给定Object的属性,有两种方法:
for (var prop in obj) {
//do stuff
}
包括原型的属性,通常不是人们想要的,这就是为什么
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
//do stuff
}
}
是一种常见模式,但是会出现一种新类型的循环,希望在不久的将来可以使用。
for (var prop of obj) {}
这个也明确地排除了对象原型的属性。
答案 1 :(得分:0)
是的,你是对的 如果你使用 animal1.getSpecies == animal2.getSpecies true
anima2.getSpecies == animal3.getSpecies true
只存在一个函数和原型的副本