原型函数的类型

来源:互联网 发布:中国国防数据 编辑:程序博客网 时间:2024/05/16 06:07

原型函数创建总结

1.原型函数的理解图

2.声明一个函数就会自动创建一个prototype属性,这个属性指向这个函数的原型对象,

而这个函数的原型的对象默认有个constructor属性,指向最初创建的函数

3.原型函数的变形

  • 一般形式

    function Person(){    }    Person.prototype.name = "Tom";    Person.prototype.speak = function(){        console.log("abc");    }    var p1 = new Person();    console.log(Person.prototype.constructor === Person);  //true    console.log(p1.__proto__ === Person.prototype); //true    console.log(p1.hasOwnProperty("name"));    console.log(p1.hasOwnProperty("age"));    console.log("sex" in p1);
  • 判断对象的属性位置

    function position(obj,proName){        if(obj.hasOwnProperty(proName)){            return "在对象上";        }else if(proName in obj){            return "在原型上";        }else{            return "不存在";        }    }    console.log(position(p1,"name"));    console.log(position(p1,"age"));    console.log(position(p1,"sex"));
  • 组合模型,解决原型的方法共用问题

    function Person(name,age){        this.name = name;        this.age = age;    }    Person.prototype.speak = function(){        console.log(this.name);    }    var p1 = new Person("Tom",22);    var p2 = new Person("Rose",20);    console.log(p1.speak());
  • 动态原型

    function Person(name,age){        this.name = name;        this.age = age;        // 避免每次创建一个对象时重新创建这个方法覆盖之前的方法        if(!Person.prototype.eat){            Person.prototype.eat = function(){                console.log(this.name);            }           }        if(!Person.prototype.speak){            Person.prototype.speak = function(){                console.log(this.age);            }        }    }    var p1 = new Person("Tom",22);    var p2 = new Person("Rose",23);    console.log(p1.eat == p2.eat);
  • 更换原型

    function Person(opt){        this._init(opt);    }    Person.prototype = {        _init : function(opt){            this.name = opt.name;            this.age = opt.age;            this.sex = opt.sex;        },        eat : function(){        },        speak : function(){        }    }    var p1 = new Person({        name : "Tom",        age : 22,        sex : "男"    });    var p2 = new Person({        name : "Tim",        age : 21,        sex : "女"    });

原创粉丝点击