您的位置:首页 > Web前端 > JavaScript

【JavaScript面向对象编程】20160105(对象)

2016-01-05 11:31 656 查看

Function

1、函数的内建构造器是Function(),但不推荐这种方式构造函数,因为塔始终会以字符串的形式通过JavaScript的检查;

下面三行代码是等效的:
var sum = function (a,b){return a+b;};
function sum(a,b){return a+b;};
var sum = new Function ('a','b','return a+b;');


2、函数对象的属性

1)与其他对象不同的是,函数对象中含有一个构造器属性,其引用的就是Function()构造器函数;

2)也有一个length属性,用于记录该函数所拥有的的参数数量;

3)ECMA标准之外的属性caller,返回一个调用该函数对象的外层函数引用

4)函数对象中最重要的是prototype属性

每个函数的prototype属性中都包含了一个对象;

prototype只有在该函数是构造器时才会发挥作用;

该函数创建的所有对象都持有一个该prototype属性的引用,可以将其当作自身属性来使用

3、Function对象的方法

所有的Function对象都是继承自父级对象Object的,默认拥有父级对象的所有方法;

1)toString(),可得到该函数的源代码,但是内建函数.toString(),只会得到【native code】

eval.toString();
>>>"function eval(){
[native code]
}"


2)call(),如果我们没有将对象传递给首参数,或者传递给他的是null,他的调用对象会被默认为全局对象,call(对象,参数1,参数2…)

var some_obj = {
name : 'cyrus',
say : function(who) {
return 'wrecking'+who+'ball'+this.name;
}
}
>some_obj.say('happy');
>>>"wreckinghappyballcyrus"
my_obj = {
name : 'together script'
};
some_obj.say.call(my_obj,'Party');
>>>"wreckingPartyballtogether script"


3)apply(),工作方式与call()相同,不同点是参数传递形式为apply(对象,[参数1,参数2…])

4)arguments对象,是一个类似数组的对象。

arguments的callee属性,该属性引用的是当前被调用的函数对象,也就是说:

function f(){
return arguments.callee;
}
f();
>>>f()


可以通过arguments.callee实现匿名函数的递归调用

(
function(count){
if(count < 5){
alert(count);
arguments.callee(++count);
}
}
)(1)
>>>alert4次,分别为1,2,3,4


Boolean (内建对象—数据封装类对象)

1、Boolean()构造器,所创建的对象并没有多少实用性,因为他没有提供来自父级对象以外的任何方法 和属性

//创建一个 对象 b,而不是一个基本的布尔值
var b = new Boolean();
typeof b;
>>>"object"
typeof b.valueOf();
>>>"boolean"
b.valueOf();
>>>false


2、Boolean()作为一般函数,比较实用。可以将一些非布尔值转换为布尔值。

Boolean('test');
>>> true
Boolean('');
>>>false
Boolean({});
>>>true
var b1 = new Boolean(true);
b1.valueOf();
>>>true
var b2 = new Boolean(false);
b2.valueOf();
>>>false
Boolean(b1);
>>>true
Boolean(b2);
>>>true
//所有的对象都属于TRUTHY值


Number(内建对象—数据封装类对象)

1、作为一般函数时,会试图将任何值转换为数字,与parseInt(),parseFloat()的作用基本相同

2、作为构造器函数时(new Number();),汇创建一个对象

3、Number()函数中,有一些不可更改的内置属性

Number.MAX_VALUE;
>>>1.7976931348623157e+308
Number.MIN_VALUE;
>>>5e-324
Number.POSITIVE_INFINITY;
>>>Infinity
Number.NEGATIVE_INFINITY;
>>>-Infinity
Infinity;
>>>Infinity;
-Infinity;
>>>-Infinity;
NaN;
>>>NaN;


4、Number对象提供了三个方法

1)toFixed()

var n = new Number(123.456);
n.toFixed(1);
>>>"123.5"


2)toPrecision()


n.toPrecision();
>>>"1.23456"


3)toExponential()


n.toExponential();
>>>"1.23456e+2"


还有4)toString()方法,特别之处是有一个可选的radix参数(默认值是10)

var n = new Number(255);
n.toString();
>>>"255"
n.toString(10);
>>>"255"
n.toString(16);
>>>"ff"
(3).toString(2);
>>>"11"
(3).toString(10);
>>>"3"


String(内建对象—数据封装类对象)

1、String对象实际上就是一个字符数组

var pri  = 'hello';
typeof pri;
>>>"string"
var obj = new String('world');
typeof obj;
>>>"object"
obj[0];
>>>"w"
obj.length
>>>5
obj.valueOf();
>>>"world"
obj.toString();
>>>"world"
obj+"";
>>>"world"


2、String中值得关注的方法

1)toUpperCase() toLowerCase()字符串大小写

2)charAt()返回指位置的字符,与中括号[]的作用相当 ;如果charAt(index),index不存在,该方法返回一个空字符串

3)indexOf(),实现字符串内部搜索,返回第一次匹配位置的索引值。indexOf(‘x’,index),返回第index个x

4)lastIndexOf(),从字符串末端开始搜索

5)slice(index1,index2):index2为区间的末端位置,而非长度

slice(index1,-index2) <=>slice(index1, .length -index2)

6)substring(index1,index2):index2为区间的末端位置,而非长度

substring(index1, - index2) <=>substring (index1,0)

7)split(),根据传递内容分割字符串成数组。可视为join()(将一个数组合并成字符串)的反操作

var s = 'couch potato';
s.split("");
>>>["couch","potato"];


8)concat():追加字符串,类似 +
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: