重点--原型对象

    //每一个函数都有自己的prototype
    function Person(){
                    
    }
    
    function MyClass(){
                    
    }
    
    console.log(Person.prototype);
    console.log(MyClass.prototype);
    console.log(Person.prototype == MyClass.prototype);
返回值:
image.png

image.png
function MyClass(){
                    
    }
    
    var mc = new MyClass();
    var mc2 = new MyClass();
    var mc3 = new MyClass();
    
    
    console.log(mc.__proto__ == MyClass.prototype);
    console.log(mc2.__proto__ == MyClass.prototype);    
image.png



__Proto__

image.png


\color{rgba(254, 67, 101, .8)}{原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象}

//向MyClass原型中添加属性a
    
    function MyClass(){
                    
    }
    
    //向MyClass原型中添加属性a
    MyClass.prototype.a = 123;
    
    var mc = new MyClass();
    var mc2 = new MyClass();
    
    console.log(mc.a);
    console.log(mc2.a); 
返回值:
image.png




\color{rgba(254, 67, 101, .8)}{当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用}

    function MyClass(){
                    
    }
    
    MyClass.prototype.a = 123;
    
    var mc = new MyClass();
    var mc2 = new MyClass();
    
    //向mc中添加属性a
    mc.a = "我是mc中的a";
    console.log(mc.a);
    console.log(mc2.a);
image.png
    function MyClass(){
                    
    }       
    
    //向mc中添加方法sayHello
    MyClass.prototype.sayHello = function(){
        alert("hello");
    }
    
    var mc = new MyClass();
    mc.sayHello();
    
    //此时MyClass.prototype.sayHello 中有了方法sayHello
    //mc中是没有此方法的,但是调mc.sayHello();会得到返回值  hello
    //sayHello方法只有一个,但是所有对象都可以访问到
    //这样就不会污染全局作用域,因为他不在全局作用域里,在属性里

源码:

    

    
        
        
        
    
    
    


你可能感兴趣的:(重点--原型对象)