JS中通过prototype可以给函数对象追加属性与方法,
这种做法是在其他语言里面没有见过的,很有趣,
顺便调查学习一下与其他几种赋值方式的比较结果。
Obj.prototype.fn3=function(){};
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>js对象的属性,prototype作用范围测试</title>
</head>
<body>
</body>
</html>
<script type="text/javascript">
function Obj(arg){
/*第1种:函数体内变量,外部不可见*/
var a = arg;
var fn=function(){};
/*第2种:对象实例可见,相当于对象的public property*/
this.b=arg;
this.fn1=function(){};
}
/*第3种:Java中没有类似的东西,只能通过Obj.x访问*/
Obj.c=1;
Obj.fn2=function(){};
/*第4种:对象实例可见,与第2种类似,属性名与第二种设定名重复时,取得的是第二种方法的设定值,原理不明*/
Obj.prototype.d=11;
Obj.prototype.fn3=function(){};
/************************************************/
console.group('Obj');
//undefined
console.log("Obj.a = "+Obj.a);
console.log("Obj.fn = "+Obj.fn);
//undefined
console.log("Obj.b = "+ Obj.b);
console.log("Obj.fn1 = "+ Obj.fn1);
//OK
console.log("Obj.c = "+ Obj.c);
console.log("Obj.fn2 = "+Obj.fn2);
//undefined
console.log("Obj.d = "+ Obj.d);
console.log("Obj.fn3 = "+Obj.fn3);
console.groupEnd();
var A = new Obj(22);
console.group('new Obj');
//undefined
console.log("A.a = "+A.a);
console.log("A.fn = " +A.fn);
//OK
console.log("A.b = "+ A.b);
console.log("A.fn1 = "+A.fn1);
//undefined
console.log("A.c = "+A.c);
console.log("A.fn2 = "+A.fn2);
//OK
console.log("A.d = "+A.d);
console.log("A.fn3 = "+A.fn3);
console.groupEnd();
</script>
网友评论