`

javaScript 之深层次继承[利用原型链object.prototype]

阅读更多

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();







 

分享到:
评论

相关推荐

    深入理解javascript原型和闭包.pdf

    原型(Prototype)是JavaScript实现继承的基础,每一个对象都有一个原型对象,当访问一个对象的属性时,如果该对象本身不存在该属性,则会沿着原型链向上查找直到找到该属性,或者到达原型链的末端。每一个函数都有...

    javascript对象

    - `Object.prototype` 是所有对象的顶级原型,其他所有对象都可从中继承。 5. 原型链(Prototype Chain): - 当尝试访问对象的一个属性时,JavaScript会沿着原型链向上查找,直到找到该属性或到达原型链的顶部。...

    理解Javascript_07_理解instanceof实现原理

    instanceof是JavaScript中的一个操作符,用于检测构造函数的prototype属性是否出现在一个对象的原型链上。...同时,这一知识点对于深入理解JavaScript中的原型继承机制以及对象之间的关系也至关重要。

    js代码-JavaScript 原型

    JavaScript原型是JavaScript编程中一个非常重要的概念,它涉及到对象、继承和函数的深层次理解。在JavaScript中,每个对象都有一个内部属性[[Prototype]],通常通过`__proto__`(非标准,但广泛支持)或者`Object....

    javascript 面向对象继承

    `Object.extend`和`Object.prototype.extend`是辅助实现继承的工具,前者用于对象间的属性复制,后者允许对象自身调用`extend`方法。这种机制使得JavaScript具有高度的灵活性,但也可能带来一些复杂性,如原型链的...

    JavaScript不使用prototype和new实现继承机制

    在JavaScript中,实现继承是面向对象编程的一个核心概念。传统的继承方法是通过原型链(prototype chain)实现...这种继承方法的思路对于希望深入理解JavaScript对象系统和原型继承的开发者来说,是值得参考和学习的。

    老生常谈 关于JavaScript的类的继承

    总的来说,JavaScript的类继承涉及到原型链、`Object.create`、构造函数的`prototype`对象以及调用父类方法的技术。理解这些概念对于编写可维护、可扩展的JavaScript代码至关重要。在实际开发中,还需要考虑性能优化...

    javascript 宝典

    - **继承与原型链**:利用原型链实现继承。 ```javascript function Student(name, age, grade) { Person.call(this, name, age); // 调用父类构造函数 this.grade = grade; } Student.prototype = Object....

    JavaScript 24道面试题和答案.docx

    - 最准确的判断方法是`Object.prototype.toString.call()`,它能返回对象的内部表示。 3. **浅拷贝与深拷贝**: - 浅拷贝仅复制对象的引用,对原对象的修改会影响到拷贝后的对象。 - 实现浅拷贝的方法有`Object....

    15-ProtoType.rar

    在JavaScript中,由于其原型链机制,我们可以利用`Object.create()`方法或者`JSON.parse(JSON.stringify())`来创建对象的副本,前者适用于非引用类型的属性,后者适用于整个对象的深拷贝,但会丢失函数属性。...

    检查控制台中的JavaScript对象方法和属性

    在JavaScript中,原型链(prototype chain)使得对象可以继承其他对象的属性和方法。要检查对象的原型,可以使用`__proto__`属性,或者`Object.getPrototypeOf(obj)`方法。例如,`console.log(obj.__proto__)`会显示...

    JavaScript语言入门教程&demo.zip

    原型链使得对象可以继承其他对象的属性和方法,是实现面向对象编程的关键。 6. **闭包** 闭包是JavaScript中的一个高级特性,允许函数访问并操作外部作用域的变量,即使在其外部作用域已经销毁的情况下。 7. **...

    [JavaScript权威指南(第6版)]附源码.rar

    10. **源码分析**:书中提供的源代码可以帮助读者理解各种复杂编程概念的实际应用,通过阅读和调试源码,开发者可以提升对JavaScript深层次的理解。 总的来说,《JavaScript权威指南(第6版)》是一本全面而深入的...

    javascript进阶版纯手写课件

    通过上述知识点介绍,我们可以看到JavaScript进阶内容是相对复杂且深奥的,要求我们对JavaScript的基本概念和运行机制有更深层次的理解。通过实践和深入学习这些进阶知识点,我们可以更好地掌握JavaScript编程,编写...

    一套比较完整的javascript面试题(部分答案)

    JavaScript的原型链允许对象继承原型对象的属性,这形成了一个原型链结构,直到`Object.prototype`。 文件内容还提到了JavaScript中的保留字,如`with`、`class`和`void`。保留字是语言中预留下来的关键字,不能...

    每个JavaScript开发人员应该知道33个概念

    11. 原型链(Prototype Chain):原型链是通过原型对象形成的链状结构,用于实现继承。 12. 基于类的继承与基于原型的继承:JavaScript采用基于原型的继承,与传统的基于类的继承有所不同。 13. 属性描述符...

    JavaScript最常用的55个经典技巧

    - `Function.prototype.call()` 和 `.apply()` 用于改变函数调用的上下文(`this`指向)。 7. 对象: - 属性访问:`.`和`[]`,后者可用于动态属性名。 - 属性简写:`{key: value}` 等同于 `{key: key: value}`。...

    前端大厂最新面试题-copy.docx

    如果属性是引用类型,拷贝的就是内存地址,即浅拷贝是拷贝一层,深层次的引用类型则共享内存地址。 二、浅拷贝的实现 JavaScript 中存在浅拷贝的现象有: * Object.assign() * Array.prototype.slice(), Array....

    javascript教程

    4. **原型与继承**:JavaScript使用原型链实现继承,每个对象都有一个隐含的prototype属性,指向创建它的函数的原型对象。通过原型链,子对象可以访问父对象的属性和方法。 5. **DOM操作**:Document Object Model...

Global site tag (gtag.js) - Google Analytics