简单原型

1、简单原型

    function Person() {
    }
    Person.prototype = {
        name : "xiao A",
        age : 26,
        say : function () {
            alert("I am simple prototype function");        
        }
    }
    var p1 = new Person();
    alert(Person.prototype.constructor)     // function Object() { [native code] }
    for(attr in p1){
        alert(attr);        // name   age    say
    }

上面的方法虽然在创建原型属性的时候比较便捷,但是他改变了 Person.prototype 的 constructor , 因此需要对上面的方法进行改造

2 、方法一

    function Person() {
    }
    Person.prototype = {
        constructor : Person,
        name : "xiao A",
        age : 26,
        say : function () {
            alert("I am simple prototype function");
        }
    }
    var p1 = new Person();
    alert(Person.prototype.constructor)     // function Person() {  }
    for(attr in p1){
        alert(attr);        //    constructor    name   age    say
    }

该方法实现了 在使用简单原型时,不改变 原型的构造器 即 Person.prototype 的 constructor ,他的缺点是 constructor 属性变成了 可枚举的属性,所以还需要对其进行改进

3、 Object.defineProperty()  可以为原型对象重新加入构造器

    function Person() {
    }
    Person.prototype = {
        name : "xiao A",
        age : 26,
        say : function () {
            alert("I am simple prototype function");
        }
    }

    Object.defineProperty(Person.prototype,"constructor",{
        enumerable : false,             // 指定属性不可枚举
        value : Person                   // 指定 值
    })

    var p1 = new Person();
    alert(Person.prototype.constructor)     // function Person() {  }
    for(attr in p1){
        alert(attr);        //   name   age    say
    }

4、原型的动态特性

    // 原型的动态特性
    function Person() {
    }
    var p1 = new Person();
    Person.prototype.say = function () {
        alert("我是原型特性")
    }
    p1.say();           //  我是原型特性
   function Person() {
   }
   var p1 = new Person();
    Person.prototype = {
        constructor : Person,
        say : function () {
            alert("我是原型的函数!")
        }
    }
    p1.say();                // p1.say is not a function
   function Person() {
   }

    Person.prototype = {
        constructor : Person,
        say : function () {
            alert("我是原型的函数!")
        }
    }
    var p1 = new Person();
    p1.say();                // 我是原型的函数!

注意 : 简单原型使用的顺序(实例对象必须在原型对象之后创建)

 

posted @ 2017-11-07 22:12  linfang.zhou  阅读(181)  评论(0编辑  收藏  举报