1.使用对象初始化程序
除了用构造函数来创建对象,您可以用对象初始化程序创建对象,对象初始化程序(Object initializer)技术是从 C++ 中引用来的,它的用法如下:
objectName = {property1:value1, property2:value2,..., propertyN:valueN}
例子:
a={x:1,y:2}; alert(a.x);
2.用构造函数定义对象类:
创建一个函数来指定对象的名字、属性和方法来定义对象类,例如假设您需要创建的对象类为 car,它具有属性 make、model、year 和 color,您可以这样:
function car(make, model, year) { this.make = make this.model = model this.year = year }
现在您可以创建一个对象:mycar,
mycar = new car("Eagle", "Talon TSi", 1993)
您还可以给先前定义的对象添加一个属性,如:mycar.color = "black" ,然而它不会影响其它的同类对象。
3.索引对象属性
在 JavaScript 中,对象也是一个数组,可以按名称(使用对象名称,后跟一个圆点和属性的名称)来引用一个对象的任何成员(属性和方法), 也可以按其数组下标索引来引用。JavaScript 中下标的是从 0 开始编号的,也可以用其名称来引用下标。因此您可用多种方法来引用属性,如果某文档有两个表单,其中第二个表单名为“myForm”下面的方法是等价的:
document.myForm
document.forms[1] // [1] 是 HTML 源顺序中属性 forms 的索引。
document.forms["myForm"]
4 为对象类定义属性
您可以用 prototype 属性在先前定义的对象类中加入一个属性,它可以被所有指定的对象类所共享。下面的代码为 car 类所有的对象添加一个 color 属性,并为 car1 的 color 属性赋值:
Car.prototype.color=null
car1.color="black"
5.数组的初始化:
var a=new Array(); a=[1,1,1,2,333]; var a=[1.1,{x:2,y:33}]; alert(a[1].x); var a=[1,,,,,3];
6.prototye: (5个)
Number,String,Boolean, undefined , and null
String
可以使用包装类
var s=new String("ssssss");
Number :
Property | Value |
---|---|
Number.MAX_VALUE | Largest magnitude representable |
Number.MIN_VALUE | Smallest magnitude representable |
Number.POSITIVE_INFINITY | The special value Infinity |
Number.NEGATIVE_INFINITY | The special value –Infinity |
Number.NaN | The special value NaN |
Boolean:
var b0=new Boolean(true); var b1=new Boolean();//false var b2=false;
7.Date对象
var now=new Date();
var xmas=new Date(2008,11,25);//表示2008年12月25日,因为月份是从0开始
8.for/in
for(variable in object){ statement; } eg: //枚举数组下标 var a=[1.1,{x:2,y:33}]; for(var i in a){ document.writeln(i); } //把一个对象的所有属性名复制到一个数组中 var a={x:1,y:22}; var b=new Array(); var i=0; for(b[i++] in a); document.write(b[0]);
9.throw语句
if(x<0)throw new Error("错了!!!");
10.try/catch/finally
try{} catch(ex){} finally{}
11.typeof
var a="ddd"; document.write(typeof a );
12. 使用Function()创建函数(动态的创建函数 )
创建函数除了使用function语句之外,还可以使用如下:
var f=new Function("x","return x*x;"); var f2=new Function("x","y","return x*y");
13函数直接量
var a=new Array(); a[0]=function(x){return x*x;};//定义函数并保存它,调用的时候可以使用a[0](2)语句 a.sort(function(a,b){return a-b;}); //定义函数,把它传递给另外一个函数 var ttt=(function(x){return x*x;})(10);//定义函数并调用 var f=function fact(x){return x*fact(x-1);}//注意该函数没有真正创建名称为fact的函数,只是使用这个名字来 引用自己实现递归.(参考第16点)
14作为数据的函数
function sq(x){return x*x;}; var b=sq;//现在 本b引用的函数和sq一样. var c=b(22); function add(x,y){return x+y;}; function operate(fun,p1,p2){ return fun(p1,p2); } operate(add,1,3) ; //和上面相同的方式重新实现, var operators=new Object(); operators["add"]=function(x,y){return x+y}; function operate2(fun_name,p1,p2){ return operators[fun_name](p1,p2); } operate2("add",operate2("add",1,11),1) ;
15.将对象保存在数组中,间接改变对象的值.
<table border=1 id="win1" width=100> <tr> <td> fasfa </td> </tr> </table> <script> t=document.getElementById("win1"); o=new Array(); o.push(t); o[0].width=200; </script>
16.函数真正的参数:Arguments对象.
对于函数参数可变的情况,使用arguments非常管用,用法和数组一样,不过要记住它不是数组噢!
改变arguments[0]的值就会改变函数第一个参数的值,依次类推.
属性callee: 用来调用函数自己,对于没有函数名的变量非常有用.
function(x){ return arguments.callee(x-1); }
17.函数属性.(Function对象)
javascript函数都是对象!你调用函数的时候可以传入任意的函数个数,所以就有了只读属性length .
length属性:
他的作用就是返回函数定义的实际参数个数.用法如下:
function check(args){ var actual=args.length; //实际的参数个数 var expected=args.callee.length; //要求的参数个数 }
prototype属性
18.对象属性的枚举
var oo=new Object(); oo.id="22"; oo.name="ztc" function f(obj){ for(var o in obj){ document.writeln(o); } }
19.删除未定义的属性.
delete oo.id; delete oo.name;
delete 是真正的把该属性从对象中移除.
20.用构造函数定义方法.
注意这种方法定义方法会损耗很大的内存! 最好使用"原型方式"创建
function test(){alert("hi!");}; function fun(){ this.t=test; } var f=new fun(); f.t();
21.类属性/方法
类名.属性名= 值
类名.方法名=function (){};
22.继承
function A(){
this.x=1;
this.y=2;
}
function B(){
this.z=9;
}
B.prototype=new A();
B.prototype.constructor=B;//constructor属性用来引用构造函数.
B.prototype.method=function(){
alert(this.y);
}
b=new B();
b.method();
constructor可以用来确定给定对象的类型
if((typeof o == "object") && (o.constructor == Date)){ }