/**
call的参数是一个对象的实例
call的参数是一个函数,即一个对象
创建一个基类对象作为子类原型的原型 共享基类prototype的方法
为函数动态地增加属性、方法
为函数prototype的属性添加方法
*/
this.name = "window";
function Class1(){
this.name = "class1"; //设置对象名----若Call调用后在给实例化对象赋值!!
this.showTxt = function(){alert(this.name)}
}
Class1.prototype.say = function(){
alert(this.name);
}
Class1.hello = function(){
alert('Hello');
}
function Class2(){
Class1.call(this); //call对象冒充继承属性,方法
this.name = "class2"; //由Class2创建实例后实例对象的name值,并不是Class2.name
}
Class2.prototype = new Class1();
Class2.prototype.say = function(){
alert("a");
}
var cls1 = new Class1();
var cls2 = new Class2();
//cls2.say();
//Class1.showTxt(); //Class1此时是一个function对象的引用
//cls1.showTxt.call(cls2); //实例对象的方法调用Call
//cls1.showTxt.call(Class2);
/**创建一个基类的对象作为子类原型的原型----->子类对象直接调用基类prototype的方法
* 构造函数创建对象属性 -------> call对象冒充继承属性,方法
* 原型链创建对象方法
*/
for(var item in Class1){
document.write(typeof item + ";" + item);
}
call的参数是一个对象的实例
call的参数是一个函数,即一个对象
创建一个基类对象作为子类原型的原型 共享基类prototype的方法
为函数动态地增加属性、方法
为函数prototype的属性添加方法
*/
this.name = "window";
function Class1(){
this.name = "class1"; //设置对象名----若Call调用后在给实例化对象赋值!!
this.showTxt = function(){alert(this.name)}
}
Class1.prototype.say = function(){
alert(this.name);
}
Class1.hello = function(){
alert('Hello');
}
function Class2(){
Class1.call(this); //call对象冒充继承属性,方法
this.name = "class2"; //由Class2创建实例后实例对象的name值,并不是Class2.name
}
Class2.prototype = new Class1();
Class2.prototype.say = function(){
alert("a");
}
var cls1 = new Class1();
var cls2 = new Class2();
//cls2.say();
//Class1.showTxt(); //Class1此时是一个function对象的引用
//cls1.showTxt.call(cls2); //实例对象的方法调用Call
//cls1.showTxt.call(Class2);
/**创建一个基类的对象作为子类原型的原型----->子类对象直接调用基类prototype的方法
* 构造函数创建对象属性 -------> call对象冒充继承属性,方法
* 原型链创建对象方法
*/
for(var item in Class1){
document.write(typeof item + ";" + item);
}