JavaScript学习总结(三)

面向对象的Javascript

Javascript是基于对象的,而并非基于类,在Javascript中“一切皆对象”。但是,Javascript的函数式语言的特性使得它本身是可编程的,它可以变成你想要的任何形式。

原型继承

JavaScript 中的继承是通过原型链来实现的,调用对象上的一个方法,由于方法在Javascript对象中是对另一个函数对象的引用,因此解释器会在对象中查找该属性,如果没找到则在其内部对象prototype上搜索。由于prototype对象与对象本身的结构是一样的,因此这个过程会一直回溯到发现该属性,则调用该属性,否则报告一个错误。关于原型继承,看下面这个例子
    function base(){
        this.baseFunc = function () {
            alert("base behavior");
            }
    }
    function middle () {
        this.middleFunc = function () {
            alert("middle behavior");
            }
    }
    middle.prototype = new base();
    function final () {
        this.finalFunc = function () }
            alert("final behavior");
            }
    }
    final.prototype = new middle();
    function test (){
        var obj =new final();
        obj.baseFunc();
        obj.middleFunc();
        obj.finalFunc();
}

test ();
在function test中,我们new 了一个final对象,然后一次调用base,middle,final的方法,由于obj对象上并没有此方法。则在原型链上搜索,由于final的原型链上包含middle,middle的原型链上包含base,因此执行这个方法就实现了类的继承。

new 操作符

看个例子
    function shape (type){
        this.type = type || "rect";
        this.calc = function () {
            return "calc,"+this.type;
        }
    }
    var triangle = new shape("triangle");
    alert("triangle.calc());//calc,triangle
    var circle = new shape ("circle");
    alert(circle.calc());//calc, circle
在javascript中,通过new操作符来作用于一个函数,实质上会发生这样的动作:
    1.首先创建一个空对象。
    2.然后调用apply()方法,将这个空对象传入作为apply的第一个参数以及上下文参数。这样函数内部的this将会被这个空对象所替代。
    var triangle = new shape('triangle');
    //上一句相当于下面的代码
    var triangle = {}
    shape.apply(triangle,["tirangle"]);

posted on 2016-09-04 14:00  Joy_Xian  阅读(141)  评论(0编辑  收藏  举报

导航