美文网首页
原型实例化对象的constructor的指向问题

原型实例化对象的constructor的指向问题

作者: 赵xiao赛 | 来源:发表于2017-09-18 13:34 被阅读0次
    <html>  
      
        <head>  
            <script type="text/javascript">  
                function Person()  
                {}  
      
                Person.prototype.username = "zhangsan";  
                Person.prototype.password = "0123";  
      
                Person.prototype.getInfo = function()  
                {  
                    alert(this.username + ":" + this.password);  
                }  
                  
                var person = new Person();  
                var person2 = new Person();  
      
                person.username = "lisi";  
      
                person.getInfo();  
                person2.getInfo();  
      
            /* 
               单纯使用原型方式定义对象无法在构造函数中为属性赋初值,只能 
               在对象生成后再去改变属性值。 
             */  
      
            </script>  
      
        </head>  
      
        <body>  
      
      
        </body>  
      
      
    </html>  
    

    构造器函数在js中式相当于类的概念,但是我们在通过构造器函数实例化对象的时候可能会出现constructor的指向出现问题

    上面的方法实例出出来的person对象的constructor指向的是他的父构造器函数Person

    var Person=function(){}
    Person.prototype={
       name:
       age:
    }
    var person2=new Person 
    person2.constructor==object  
    

    这样实例化出来的对象的函数的指向就发生变化,由本来的Person的构造器函数指向Object,为了避免这样的问题,我们可以强制指向他的构造器函数

      constructor:Person,
      name:   ,
      age:    
    }
    

    这里给大家推荐几个经常用到的在与原型上操作的方法:

    合并数组

    除了数组里面的方法concat() 数组方法

    Array.prototype.push.call(arguments)
    

    判断一个数据的数据类型

    Object.prototype.toString.call(x)    x是需要判断的数据类型
    

    获取数组里面的最大项或者是最小项

    Math.max.apply(null,arr)   需要改变函数调用时的对象
    

    对于call和apply方法,传入参数的问题,call方法的参数是一个一个传递的,但是apply传入的参数是一一个数组的方式传入的,其他的没有什么区别

        B.apply(A,arguments)  //  A对象应用B对象的方法
    

    相关文章

      网友评论

          本文标题:原型实例化对象的constructor的指向问题

          本文链接:https://www.haomeiwen.com/subject/vixbsxtx.html