转载

由js apply与call方法想到的js数据类型(普通类型和引用类型)

js的call方法与apply方法的区别在于第二个参数的不同,他们都有2个参数,第一个为对象(即需要用对象a继承b,那么此时第一个参数就为a,没有则为null),call方法第二个参数为一个列表,可以是

obj.call(null, 1,2,3,4);

而apply第二个参数为数组。这就是区别,下面来说说对它们的认识。

apply最常用的就是查找数组中的最大与最小值,还可以将2个数组合并:

var max=Math.max.apply(null,array);   var min=Math.min.apply(null,array);  var arr1=new Array("1","2","3");  var arr2=new Array("4","5","6");  Array.prototype.push.apply(arr1,arr2);//向数组尾部添加一项并更新length ,返回数组长度。

这里的Array.prototype.push本身是不能合并2个数组的,如下:

var arr1 = ['1','2','3'];  var arr2 = ['4','5','6'];  alert(Array.prototype.push(arr1,arr2));//返回2  alert(Array.prototype.push.apply(arr1,arr2));//返回6

疑问:

var arr1 = ['1','2','3'];  var arr2 = ['4','5','6'];  arr1.push(arr2);  alert(arr1);//返回却是1,2,3,4,5,6呢?不解

当然,apply与call也可以用来继承类的方法。

简单的举个例子:

创建对象的四种写法:

第一种

function People(name, sex){  this.name = name;  this.sex = sex;  this.show = function(){  alert(this.name+'sex'+this.sex+'say hello');  }  }  var ming = new People('y', 'nan');  ming.show();

第二种

var People1 = {  name : 'ming',  show : function(){  alert(this.name);  }  }  People1.show();

第三种:用prototype去为对象增加属性或者方法

</pre> function CicleTwo(r){  this.r = r;  }  CicleTwo.prototype.area = function () {  console.log('第二种:'+Math.PI * this.r * this.r) ;  };  //测试  var newCicleTwo = new CicleTwo(3);  newCicleTwo.area();

第四种

var People2 = new Object(); People2.name = 'A'; People2.show = function(){ alert("ok"); }  alert(People2.name);

这里用people1去继承people

function People(name, sex){ this.name = name; this.sex = sex; this.show = function(){ alert(this.name+'sex'+this.sex+'say hello'); } } var ming = new People('y', 'nan'); // ming.show();  var People1 = { name : 'ming', show : function(){ alert(this.name); } } // People1.show();  People1.show.apply(ming);//弹出y,而不是ming,说明继承了people中的名字y

今天就到这里了,太晚了,明天再整理数据类型的知识点。

到此处参考的资料:

http://www.cnblogs.com/KeenLeung/archive/2012/11/19/2778229.html

========================================================

参考资料:

http://www.zhihu.com/question/27114726

javascript 中数据类型

http://www.jb51.net/article/29703.htm

正文到此结束
Loading...