原型函數的類型

原型函數創建總結

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 : "女"
        });

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章