本文章观点取自<JS语言精粹>。
JS不是一门给予类的语言, 所以不能直接提供继承。但是JS还是可以实现继承的。下面介绍三种实现继承的方式:
一. 伪类
顾名思义, 伪类和其他强类型语言中类的概念类似, 他通过new 关键字调用构造函数,但是这种方法无法构造的类没有私有环境, 属性公开, 不能访问父类方法, 带来了语言的使用风险, 所以这种方式尽量不用。
二. 原型继承
//基类var testClass = {
name:"testClass",
getName: function()
{
return this.name;
}
};
var F = function(){};
F.prototype = o;
return new F();
}
//创建子类
var childClass = create(testClass);
childClass.saying = "hello"
console.log(childClass.getName()); //testclass
console.log(childClass.name);//testclass
console.log(childClass.saying);//hello
childClass.getName = function(){ return "childClass"};
console.log(childClass.getName()); //childClass
总结: 基于原型的继承能够很好的继承父类的属性, 同时,在更新属性时,不会对父类更改,并且易于实现, 但是缺点是没有私有变量
三 . 函数化
这种方法可以提供私有变量.
var parentClass = function()
{
var that ={}
var name = "parentClass"; // 父类的私有变量 只有getName 可以调用
that.getName = function(){return name}\
return that;
}
var childClass = funcrtion()
{
var childname = "chilaClass";// 子类私有变量
var that = parentClass();// 继承父类
that.say = "hello";//对父类进行方法的拓展
return that;
}
var child= childClass();
console.log(child.say);//hello
console.log(child.getName());//parentclass
以上