由js apply与call想到的js数据类型

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


1

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

免费会员网

  

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

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


1

2

3

4

5

6

7

8

9


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个数组的,如下:


1

2

3

4

5

6

7


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

  

疑问:


1

2

3

4

5

6

7


var arr1 = [‘1‘,‘2‘,‘3‘];

 

var arr2 = [‘4‘,‘5‘,‘6‘];

 

arr1.push(arr2);

 

alert(arr1);//返回却是1,2,3,4,5,6呢?不解

免费会员网

  

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

简单的举个例子:

创建对象的四种写法:

第一种


1

2

3

4

5

6

7

8

9


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();

  

第二种


1

2

3

4

5

6

7


var People1 = {

name : ‘ming‘,

show : function(){

alert(this.name);

}

}

People1.show();

  

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


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17


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();

  

第四种


1

2

3

4

5

6

7


var People2 = new Object();

People2.name = ‘A‘;

People2.show = function(){

alert("ok");

}

 

alert(People2.name);

  

这里用people1去继承people


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19


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

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

6-22  11点继续学习:js数据类型,参数传递的问题。

原始数据类型(5种)

1、number

2、string

是唯一没有固定大小的原始类型。

因为我们都知道原始类型的值存储在栈中,因为大小固定,内存较小,查找起来快;引用类型的值存在堆中,而引用的变量中存的是其值的地址,地址是固定的,所以存在栈中,但它的值是存在堆中的,变量中存的是它的地址。

3、undefind

当声明变量后没有初始化,并不是未定义变量


1

2

3


var oTemp;

alert(typeof oTemp);  //输出 "undefined"

alert(typeof oTemp2);  //输出 "undefined"

  

前面的代码对两个变量输出的都是 “undefined”,即使只有变量 oTemp2 从未被声明过。如果对 oTemp2 使用除 typeof 之外的其他运算符的话,会引起错误,因为其他运算符只能用于已声明的变量上。

当函数无明确返回值时,返回的也是值 “undefined”,如下所示:


1

2

3


function testFunc() {

}

alert(testFunc() == undefined);  //输出 "true"

  

免费会员网

4、null

表示尚未存在的对象,如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。


1

alert(null == undefined);  //输出 "true"

  

这是因为值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。

5、boolean

引用数据类型,常见的有Object,Array,Function,Date。

所有的传参都是传递的值。

简单的原始数据传参


1

2

3

4

5

6

7

8

9

10

11


function show(num){

 

var a = 5;

 

num = a;

 

alert(num);

 

}

 

show(2);//返回5

  

因为值都是存在栈中,以值传递。

引用类型的传参,例子一


1

2

3

4

5

6


function setName(obj){

obj.name = ‘abc‘;

}

var person=new Object();

setName(person);

alert(person.name);

  

初始化一个对象person,person指向的是对象本身的地址,然后通过函数将person对象设置一个name属性值为’abc’;这里始终
要记住的是,传递过来的地址,是用在函数内部声明的局部变量obj来保存,相当于将person对象地址值赋值给obj。因为obj和person指向的
是同一个对象,当obj变化后,person也会表现出来。

再来看这个例子


1

2

3

4

5

6

7

8


function setName(obj){

obj.name = ‘abc‘;

obj = new Object();

obj.name = "def";

}

var person=new Object();

setName(person);

alert(person.name);//abc

  

在函数中可以看到,将函数内部的局部变量obj重新赋值了一个新的对象地址。此时obj就不在指向person了,那当然结果返回abc而不是def。

参考资料:

http://www.w3school.com.cn/js/pro_js_primitivetypes.asp

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

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

javascript 中数据类型

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

时间: 2024-10-17 14:26:41

由js apply与call想到的js数据类型的相关文章

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

原文地址:由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=Mat

Js apply 方法 具体解释

Js apply方法具体解释 我在一開始看到javascript的函数apply和call时,很的模糊,看也看不懂,近期在网上看到一些文章对apply方法和call的一些演示样例,总算是看的有点眉目了,在这里我做例如以下笔记,希望和大家分享..  如有什么不正确的或者说法不明白的地方希望读者多多提一些意见,以便共同提高.. 主要我是要解决一下几个问题: 1.        apply和call的差别在哪里 2.        什么情况下用apply,什么情况下用call 3.        ap

js apply()用法

Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家分享..  如有什么不对的或者说法不明确的地方希望读者多多提一些意见,以便共同提高.. 主要我是要解决一下几个问题: 1.apply和call的区别在哪里 2.什么情况下用apply,什么情况下用call 3.apply的其他巧妙用法(一般在什么情况下可以使用apply)

Js apply call方法详解

Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家分享..  如有什么不对的或者说法不明确的地方希望读者多多提一些意见,以便共同提高.. 主要我是要解决一下几个问题: 1.apply和call的区别在哪里 2.什么情况下用apply,什么情况下用call 3.apply的其他巧妙用法(一般在什么情况下可以使用apply)

Js apply 方法 详解

Js apply方法详解 我在一开始看到JavaScript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家分享..  如有什么不对的或者说法不明确的地方希望读者多多提一些意见,以便共同提高.. 主要我是要解决一下几个问题: 1.        apply和call的区别在哪里 2.        什么情况下用apply,什么情况下用call 3.        apply的其他

js apply()与call()方法详解

摘自此处:http://blog.csdn.net/business122/article/details/8000676 Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家分享..  如有什么不对的或者说法不明确的地方希望读者多多提一些意见,以便共同提高.. 主要我是要解决一下几个问题: 1.apply和call的区别在

Js apply()

Js apply方法详解 我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家分享.. 如有什么不对的或者说法不明确的地方希望读者多多提一些意见,以便共同提高.. 主要我是要解决一下几个问题: 1.apply和call的区别在哪里 2.什么情况下用apply,什么情况下用call 3.apply的其他巧妙用法(一般在什么情况下可以使用apply) 我

js apply 和call的区别

function Person(name, profession) { this.name = name; this.profession = profession; this.speak = function () { document.writeln("我叫"+name+",我是一位"+profession); } } function Student(name,profession) { Person.call(this,name,profession); }

js apply使用

js中apply方法的使用 1.对象的继承,一般的做法是复制:Object.extend prototype.js的实现方式是:  Object.extend = function(destination, source) {     for (property in source) {         destination[property] = source[property];     }     return destination; } 除此之外,还有种方法,就是:Function.