js学习记录 ...
时间:2010-08-06 来源:longlong821
一章
1:JS语句最好以分号结尾,虽然一般不会出错 但为了兼容性 最好都以分号结束
2:JS的注释不要嵌套,因为/*符号会把最近的 */进行匹配后面的就不是注释了
3:= 和 ==的 区别 =在 比较前会做类型转换(比较宽松)==在比较前不会做类型转换 比较严格
4:对象的2个 操作符
in 判断某个属性是否属于对象
instanceof 判断1个对象是否是某个类的实例
EXAMPLE
var t={name:“暗示”,id:“34556”}
“name” in t
var d=new Date()
d instanceof Date
5:typeof 检查 类型信息
var s=“dsds”; typeof s 返回“string”
6:delete 用于删除属性或变量 但不能删除核心对象的属性 和用VAR声明的变量 返回BOOL值
d=1; delete d;
var t={op:1 , xx:2} delete op;
7:void可以用在任何表达式之前 使表达式的返回值为UNDEFINED
8:for in的循环
var t={pp:1,ll:2};
for(p in t)
alert(t[p]);
对 数组 对象 类的成员进行遍历
9:NAN表示 非数字 eval()执行字符串的JS代码
escape unescape 编码和解码
10 new Array()和=[]都可以直接创建数组对象
二:
1:null 和 undefined 都代表值的缺失
未定义和未赋值的都为 undefined
2:函数的 参数集合 属性 arguments 的callee属性 可以实现递归算法 因为callee指向函数的引用
function kk(m)
{
if(m《=0)
return 1;
else
return m*argument.callee(m-1);
}
3:函数的caller可以引用 调用函数的 父函数
function f1(v1)
{
f2(v1,2*v1);
}
function f2(v1,v2)
{
f3(v1,v2,2*v2);
}
function f3(v1,v2,v3)
{
var foo=arguments.callee;
while((foo!=null)&&(foo!=window))
{debugger
// for(p in foo.arguments)
// alert(foo.arguments[p]);
for(var i=0;i<foo.arguments.length;i++)
alert(foo.arguments[i]);
foo=foo.caller;
}
}
f1(5);
经实验arguments虽然可以看做是 数组但实际不是数组 因为 for in 无用
4:function 用来定义类 的集中方式
function classa()
{
pp:"ss";
ll:"ll";
f1:function()
{
alert("sd");
}
}
function classb()
{
this.pp="ss";
this.ll=1;
this.f1=function()
{
alert("ww");
}
}
function classc()
{
}
classc.prototype.pp="ss";
classc.prototype.ll="ll";
classc.prototype.f1=function()
{
alert("ss");
}
5:apply和call方法都是将函数绑定到其他对象上执行
apply(thisobj,[arg1,arg2,....argn]) call(thisobj,arg1,arg2.....argn)
方法.apply(另一个对象,[参数]) 另一个对象的方法参数和原方法参数个数相同
6:this和with关键字
this 在构造器中指新创建的对象实例 在对象方法被调用时指调用该方法的对象实例
with一般用来缩短代码量
with(math)
{
这里直接可以省略MATH 写他包含的方法
}
7:prototype 用来声明类的实例属性和方法 声明类的静态属性和方法直接classA.ss="pp";class.f1=function () {};即可
8:JS中类的继承和多态的实现
继承有3中方式
function classa()
{
pp:"ss";
ll:1;
}
A:直接抄写
function classb()
{
pp:"ss";
ll:1;
}
B:循环遍历COPY
function calssa(){};
classa.prototype.pp="ss";
classa.prototype.ll="ll";
function classb()
{}
for(p in classa.prototype)
classb.prototype[p]=classa.prototype[p];
C:利用OBJECT.EXTEND方法()
classb.prototype=object.extend({kj:"lk"},classa.prototype)
//D:多态
function classa()
{}debugger
function classb(){}
classa.prototype={f1:function(){this.f2();},f3:function(x,y){return x+y;}}
classb.prototype=Object.extend(
{
f2:function(){return 2;},
f3:function(x,y,z){return x+y+z;}
},classa.prototype);
var c=new classb();
var t=c.f3(3,4,5);
alert(t);