1. 对象冒充
function ClassA(sColor)
{
this.color = sColor;
this.sayColor = function ()
{
console.log(this.color);
}
}
function ClassB(sColor, sName)
{
this.newMethod = ClassA;
this.newMethod(sColor);
delete this.newMethod;
this.name = sName;
this.sayName = function()
{
console.log(this.name);
}
}
2. call()
function ClassB(sColor, sName)
{
ClassA.call(this, sColor);
this.name = sName;
this.sayName = function()
{
console.log(this.name);
}
}
3. apply()
function ClassB(sColor, sName)
{
//ClassA.apply(this, new Array(sColor));
ClassA.apply(this, arguments);
this.name = sName;
this.sayName = function()
{
console.log(this.name);
}
}
4. 原型链
function ClassA()
{}
ClassA.prototype.color = 'red';
ClassA.prototype.sayColor = function()
{
console.log(this.color);
}
function ClassB()
{}
ClassB.prototype = new ClassA();
ClassB.prototype.name = '';
ClassB.prototype.sayName = function()
{
console.log(this.name);
}
//instanceof
var obj = new ClassB();
console.log(obj instanceof ClassA); //outputs 'true'
console.log(obj instanceof ClassB); //outputs 'true'
5. 混合方式
function ClassA(sColor)
{
this.color = sColor;
}
ClassA.prototype.sayColor = function ()
{
console.log(this.color);
}
function ClassB(sColor, sName)
{
ClassA.call(this, sColor);
this.name = sName;
}
ClassB.prototype = new ClassA();
ClassB.prototype.sayName = function()
{
console.log(this.name);
}
//test
var objA = new ClassA('red');
var objB = new ClassB('blue', 'Nicholas');
objA.sayColor();
objB.sayColor();
objB.sayName();
function ClassA(sColor)
{
this.color = sColor;
this.sayColor = function ()
{
console.log(this.color);
}
}
function ClassB(sColor, sName)
{
this.newMethod = ClassA;
this.newMethod(sColor);
delete this.newMethod;
this.name = sName;
this.sayName = function()
{
console.log(this.name);
}
}
2. call()
function ClassB(sColor, sName)
{
ClassA.call(this, sColor);
this.name = sName;
this.sayName = function()
{
console.log(this.name);
}
}
3. apply()
function ClassB(sColor, sName)
{
//ClassA.apply(this, new Array(sColor));
ClassA.apply(this, arguments);
this.name = sName;
this.sayName = function()
{
console.log(this.name);
}
}
4. 原型链
function ClassA()
{}
ClassA.prototype.color = 'red';
ClassA.prototype.sayColor = function()
{
console.log(this.color);
}
function ClassB()
{}
ClassB.prototype = new ClassA();
ClassB.prototype.name = '';
ClassB.prototype.sayName = function()
{
console.log(this.name);
}
//instanceof
var obj = new ClassB();
console.log(obj instanceof ClassA); //outputs 'true'
console.log(obj instanceof ClassB); //outputs 'true'
5. 混合方式
function ClassA(sColor)
{
this.color = sColor;
}
ClassA.prototype.sayColor = function ()
{
console.log(this.color);
}
function ClassB(sColor, sName)
{
ClassA.call(this, sColor);
this.name = sName;
}
ClassB.prototype = new ClassA();
ClassB.prototype.sayName = function()
{
console.log(this.name);
}
//test
var objA = new ClassA('red');
var objB = new ClassB('blue', 'Nicholas');
objA.sayColor();
objB.sayColor();
objB.sayName();