说到继承,只要学过Java的肯定都知道,然而在JavaScript中出现的不是简单的继承两个字,而是原型继承,那么它们是一样的吗?
“原型”是一种抽象,代表事物表象之下的联系,用简单的话来说,就是原型描述事物与事物之间的相似性。就比如说人,人本来是一个对象,女人也是一共对象,女人以人为基础,但是她有自己的属性。原型继承要求你必须有一个对象可以作为另一个对象的基础,这样就可以基于已有的对象创建新的对象,同时还不必因此创建自定义类型,看下面这个函数:
function object(o){
function F(){}
F.prototype = o;
return new F();
}
在object()函数内部,先创建了一个临时性的构造函数,然后将传入的对象作为这个构造函数的原型,最后返回了这个临时类型的一个新的实例,那么继续看下面的:
let person = {
name : "Tom",
friends : ["Sam","Coco"]
};
let anotherPerson = object(person);
anotherPerson.name = "Jack";
anotherPerson.friends.push("Bob");
alert(person.friends); // "Sam , Coco , Bob"
这个例子说明将person作为原型,所以它的原型中就包含一个基本类型值和一个引用类型值属性,这意味着person.friends不仅属于person所有,而且会被anotherPerson共享。
所以,原型可以通过描述两个事物之间的相似关系来复用代码,我们可以把这种复用代码的模式称为原型继承。