• 渡一——11-2原型,原型链,call/apply(下)


    认识proto

    Person.ptototype.name = 'abc';
    function Person(){
        /*var _private //私人属性
        __proto__系统属性*/
    
        var this = {
            __proto__ : Person.prototype
        }
    }
    var person = new Person();
    person.__proto__//系统属性
    Person.prototype.name = 'sunny';
    function Person(){
        var this = {__proto__ : Person.prototype}
    }
    var person = new Person();
    Person.prototype = {//从新开了一个空间
        name : "cherry"
    }
    
    person.name //sunny
    Person.name //cherry
    
    
    var obj = {name:'a'};
    var obj1 = obj;
    obj = {name:'b'}//新开空间
    
    obj.name //b
    obj1.name //a
    
    Person.prototype = {name:'a'};
    __proto__ = Person.prototype;
    Person.prototype = {name:'b'};
    Person.prototype.name = 'sunny';
    function Person(){
        // var this = {__proto__ : Person.prototype}
    }
    //这次是直接就改了,如果在下面就是指向后再修改
    Person.prototype = {//从新开了一个空间
        name : "cherry"
    }
    var person = new Person();
    person.name //cherry

    原型链
    1.如何构成原型链
    2.原型链上属性的增删改查
    3.绝大多数对象的最终都会继承自Object.prototype;
    4.Object.create(原型)

    // Grand.ptototype.__proto__ = Object.prototype //最终
    Grand.ptototype.lastName = "Deng";
    function Grand(){
    
    }
    var grand = new Grand();
    
    Father.prototype = grand;
    function Father(){
        this.name = "xuming"this.fortune = {
            card1 : 'visa'
        }
        this.num = 1;
    }
    var father = new Father();
    
    Son.prototype = father;
    function Son(){
        this.hobbit = "smoke"
    }
    var son = new Son();
    
    son.hobbit //smoke
    son.name //xumin
    son.lastName //Deng
    
    son.fortune.card2 = 'master' //修改父亲
    
    son.num++;
    father.num //100;
    son.num //101 取出来变成自己的属性
    Person.ptototype = {
        name : 'a',
        sayName : function(){
            console.log(this.name);
        },
        height:100
    }
    
    function Person(){
        this.name = "b";
        this.eat = function (){
            this.height ++;
        }
    }
    
    var person = new Person();
    person.sayName();//b
    Person.ptototype.sayName() //a
    
    person.eat();//height:101 取出来变成自己的属性

    create指定原型创建对象

    var obj = {};
    var obj1 = new Object();
    // obj1.__proto__ ----> Object.prototype;
    
    
    Object.create
    // var obj = object.create(原型)
    var obj = {name:"sunny",age:123}
    var obj1 = Object.create(obj);
    obj1.name //sunny
    
    Person.prototype.name = 'sunny';
    function Person(){
        // var this = {__proto__ : Person.prototype}
    }
    var person = new Person();
    var person = Object.create(Person.prototype);//用Person上的原型来创建person
    person.name //sunny
    
    Object.create(null);
    
    
    var obj = Object.create(null);//与Object.prototype原型断开
    // obj.__proto__ = Object.prototype

     toStirng方法

    //每个包装类都改写了自己的toString()方法
    Object.prototype.toStirng
    Number.prototype.toStirng
    Array.prototype.toStirng
    Boolean.prototype.toStirng
    String.prototype.toStirng
    
    Number.prototype.toString = function(){
        return "老邓身体好";
    }
    var num = 123;
    num.toString() //"老邓身体好"
    
    
    // var obj ={};
    var obj = Object.create(null)//断开了Object.__prototype__.toString()方法
    document.write(obj)//报错 document.write调用了Object原型上的Object.toString()方法
    
    
    var obj = Object.create(null)
    obj.toString = function(){
        return "老邓身体好";
    }
    document.write(obj); //"老邓身体好"

    call&apply改变this指向,传参不同

    function Person(name,age){
         //this == obj
         this.name = name;
         this.age = age
     }
     var person = new Person('deng',100);
     var obj = {}
     Person.call(obj,'cheng',300);
     obj //{name:'name',age:300}
    
     function test(){}
     test ----> test.call()
    
    
     function Person(name,age,sex){
         this.name = name;
         this.age = age;
         this.sex = sex;
     }
    
     function Student(name,age,sex,tel,grade){
         Person.call(this,name,age,sex );
         this.tel = tell;
         this.grade = grade;
     }
    
     var student = new Student('sunny',123,'male',139,2017)
    function Wheel(wheelSize,style){
         this.style = style;
         this.wheelSize = wheelSize;
     }
    
     function Sit(c,sitColor){
         this.c = c;
         this.sitColor = sitColor
     }
     function Model(height,width,len){
         this.height = height;
         this.width = width;
         this.len = len;
     }
     function Car(wheelSize,style,c,sitColor,height,width,len){
         Wheel.call(this,wheelSize,style); //借腹生子
         Sit.call(this,c,sitColor);
         Model.call(this,height,width,len);
     }
     var car = new Car(100,'好看','真皮',"red",1800,1900,4900);

    Object.prototype.toString.call()方法

    Object.prototype.toString.call(arr) == '[object Array]'
    
    //利用tostring方法判断类型--类似instanceof typeof功能
    
    下面这种情况只能用Object.prototype.toString.call()方法
    
    window.onload = function(){
        var oF = documnet.createElement('iframe');
        document.body.appendChild( oF );
        var ifArray = window.frame[0].Array;
        var arr = new ifArray();
        
        arr.constructor == Array
    
        arr instanceof Array
    
        Object.prototype.toString.call(arr) == '[object Array]'
    }

    apply
    call 需要把实参按照形参的个数传进云
    apply 需要传一个arguments

     // Wheel.apply(this,[wheelSize,style]);
     // Wheel.apply(this,arguments);
    
    
    function foo(){
        bar.apply(null,arguments)
    }
    function bar(x){
        console.log(arguments)
    }
    foo(1,2,3,4,5)
  • 相关阅读:
    c#字符串练习
    ASP.NET自定义错误
    xml学习
    xml学习二
    Jquery 正则表达式学习
    c#文件流操作
    GridView从入门到精
    GridView学习,常用记下来
    PowerShell Commands for SharePoint 2007 PowerShell Commands for SharePoint 2007
    Sharepoint自带的批量签入功能,很多人不知道,需要的时候可以看一下
  • 原文地址:https://www.cnblogs.com/lisa2544/p/15307248.html
Copyright © 2020-2023  润新知