javascript中的call.apply方法是針對function本身定義的內容,並不能將
最近研究了js的繼承,看了幻天芒的文章http://www.cnblogs.com/humin/p/4556820.html#3947420,明白了最好是使用apply或call方法來實現繼承。
但是對於call能不能將funciton的prototype內容一同復制,有疑惑,實驗之後發現是不行的。看下面的代碼,c.g()系統是報錯不識別,不認為其是一個函數。
function f(){
this.a ="a";
this.b = function(){
console.log("b");
}
/*
this.g = function(){
console.log("this is g in f().");
}
*/
}
f.prototype.g = function(){
console.log("this is g in prototype.");
}
function e(){
f.call(this);
}
var c = new e();
console.log(c.a); //彈出a
c.b(); //彈出b
var ff = new f();
ff.g();//this is g in prototype.
c.g();//c.g is not a function
如果要實現對f的完全繼承,還需要復制其原型鏈中的內容。參考以下代碼:
function f(){
this.a ="a";
this.b = function(){
console.log("b");
}
}
f.prototype.g = function(){
console.log("this is g in prototype.");
}
function e(){
f.call(this);
//f.prototype.call(this);
}
(
function(){
var Super = function(){};
Super.prototype = f.prototype;
e.prototype = new Super();
}
)();
var c = new e();
console.log(c.a); //彈出a
c.b(); //彈出b
var ff = new f();
ff.g();//this is g in prototype
c.g();//this is g in prototype
javascript中的call.apply方法是針對function本身定義的內容,並不能將