Javascript面向对象编程--原型(prototype)

在Javascript中,我们创建的每个函数都有一个prototype属性,这个属性是一个对象;它的用途是包含可以有特定类型的所有实例共享的属性和方法。可以这么来理解:prototype通过调用构造函数而创建的那个对象的原型对象。

使用原型的好处:可以让所有对象实例共享它所包含的属性和方法。也就是说,不必在构造函数中定义对象信息,而是可以直接将这些信息添加到原型中。

    //构造方法
        function Box(name,age){  
           
            this.name = name;        //添加属性
            this.age = age;
            this.run = function(){    //添加方法
                return this.name + this.age + '运行中...';
            };
        };
        var box1 = new Box('lee',100);  //实例化
        alert(box1.run());


    //原型方法
        function Box(){}

        Box.prototype.name = "Lee";  //原型属性
        Box.prototype.age = 100;
        Box.prototype.run = function(){   //原型方法
            return this.name + this.age + '运行中';
        };
        var box1 = new Box();
        var box2 = new Box();
        alert(box1.name);
        alert(box1.run());

区分实例方法与原型方法:

如果是实例方法,不同的实例化,他们的方法地址是不一样的,是唯一的;

如果是原型方法,那么他们地址是共享的,大家都是一样的;

 

注:1,在原型模式声明中,多了两个属性,这两个属性都是创建对象时自动生成的。__proto__属性是实例指向原型对象的一个指针,它的作用就是指向构造函数的原型属性construct。通过这两个属性,就可以访问到原型属性和方法了。

      2,判断一个对象是否指向了该构造函数的原型对象,可以使用isPrototypeOf()方法来测试;

          eg:alert(fun_name.prototype.isPrototypeOf(name));   //只要实例化,即都会指向原型对象;

 

原型模式的执行流程:

     1,先查找构造函数实例里的属性或方法,如果有,立刻返回;

     2,如果构造函数实例里没有,则去它的原型对象里找,如果有,就返回;

 

posted @ 2013-09-22 17:38  cbhello  阅读(274)  评论(0编辑  收藏  举报