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

<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对象的方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容