继承是面向对象核心概念。其他正统面向对象语言都会用两种方式实现继承:一个是接口实现,一个是继承。而ECMAScript 只支持继承,不支持接口实现,而实现继承的方式依靠原型链完成。
在JavaScript 里,被继承的函数称为超类型(父类,基类也行,其他语言叫法),继承的函数称为子类型(子类,派生类)
1.call+遍历
属性使用对象冒充(call)(实质上是改变了this指针的指向)继承基类,方法用遍历基类原型。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
function A()
{
this.abc=12;
}
A.prototype.show=function ()
{
console.log(this.abc);
};
//继承A
function B()
{
//继承属性;this->new B()
A.call(this); //有参数可以传参数A.call(this,name,age)
}
//继承方法;B.prototype=A.prototype;
for(var i in A.prototype)
{
B.prototype[i]=A.prototype[i];
}
//添加自己的方法
B.prototype.fn=function ()
{
alert('abc');
};
var objB=new B();
var objA=new A();
objB.show();
var objC=new B();
objC.show();
</script>
</head>
<body>
</body>
</html>
在JavaScript 里,被继承的函数称为超类型(父类,基类也行,其他语言叫法),继承的函数称为子类型(子类,派生类)
1.call+遍历
属性使用对象冒充(call)(实质上是改变了this指针的指向)继承基类,方法用遍历基类原型。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
function A()
{
this.abc=12;
}
A.prototype.show=function ()
{
console.log(this.abc);
};
//继承A
function B()
{
//继承属性;this->new B()
A.call(this); //有参数可以传参数A.call(this,name,age)
}
//继承方法;B.prototype=A.prototype;
for(var i in A.prototype)
{
B.prototype[i]=A.prototype[i];
}
//添加自己的方法
B.prototype.fn=function ()
{
alert('abc');
};
var objB=new B();
var objA=new A();
objB.show();
var objC=new B();
objC.show();
</script>
</head>
<body>
</body>
</html>