日期:2014-05-16 浏览次数:20386 次
javaScript中对于对象之间的深层次继承.
//扩充 通过原型链prototype实现多層次對象继承
var ClassA = function(){
??? ClassA.prototype.name = 'jack';???
??? ClassA.prototype.set_name = function(name){
??????? this.name = name;
??? };
??? ClassA.prototype.get_name = function(){
????????? return this.name;
??? };?????
}
var ClassB = function(){
??????? ClassB.prototype = new ClassA();
??????? ClassB.prototype.age = 25;
}
var ClassC = function(){
??????? ClassC.prototype = new ClassB();
??????? ClassC.prototype.color = 'red';
??????? ClassC.prototype.get_message = function(){
??????? return 'name :'+this.get_name()+"\n"+"age :"+this.age+"\n"+"color :"+this.color;
??? }
}
//ClassB()和ClassC()必須要運行 不可缺少 如果沒有執行這兩步操作則會報錯
//錯誤信息為 c.set_name is not a function TypeError
//對於這點我個人認為 ClassB和ClassC 是函數,需要編譯后才可以對它進行調用
//哪位兄台假如知道這裡的緣由,請留言或評論,謝謝
ClassB(); //必不可少
ClassC();//必不可少
var c = new ClassC();
c.set_name('michael');
console.log(c.get_message());
//結果為:
//name :michael
//age :25
//color :red
?
//通過for/in 對函數對象的屬性方法進行分離,并分別打印出來 function Traversal(obj){ var array1=[],array2=[],array3=[]; var array4=[]; for (var name in obj){ //對函數對象的屬性進行分析 if(typeof obj[name]== 'function'){ array3.unshift(name); }else if(typeof obj[name] == 'function'){ array2.unshift(name); }else if(typeof obj[name] !== 'function' || typeof obj[name] !=='object'){ array1.unshift(name); }//保存所有的信息 array4.unshift(name); };//返回一個多維數組 return new Array(array1,array2,array3,array4); } function test(){ var array = Traversal(new ClassC()); var myArray = new Array(); for(var i=0;i<array.length;i++){ myArray = array[i]; // console.log("this is array["+i+"] \n" +myArray +'\n 數組的長度為:' +myArray.length ); if(myArray.length>0){ console.log('----------------------------'+'\n'+"this is array["+i+"] \n" ); for(var j=0;j<myArray.length;j++){ console.log(myArray[j]+"\n"); } } } } test();
?