js里面的属性和方法类型

来源:互联网 发布:淘宝客佣金代扣款给谁 编辑:程序博客网 时间:2024/05/16 17:06

js--属性和方法(私有/公有)

【私有变量】 在对象内部使用'var'关键字来声明,而且它只能被私有函数和特权方法访问。 
【私有方法】 在对象的构造函数里声明(或者是通过varfunctionName=function(){...}来定义),
它能被特权方法调用(包括对象的构造方法)和私有方法调用,私有函数只能访问私有的方法和属性。 
【特权方法】通过this.methodName=function(){...}来声明而且可能被对象外部的代码调用。
它可以使用:this.特权函数() 方式来调用特权函数,使用 :私有函数()方式来调用私有函数。

【公共属性】 通过this.variableName来定义而且在对象外部是可以读写的。不能被私有函数所调用。 
【公共方法】 通过ClassName.prototype.methodName=function(){...}来定义可以从对象外部来调用。 
【原型属性】 通过ClassName.prototype.propertyName=someValue 来定义。 
【静态属性】 通过ClassName.propertyName=someValue 来定义。
【静态方法】 通过ClassName.funName=function(){...} 来定义。

1function myfun1(){
2   //这是私有属性
3   var private1 = "这是私有属性";
4   var privateMethod = function(){
5        alert(private1);
6    }
7   //这是实例属性
8   this.publicvar = "这是实例属性";
9   this.public1 = function(){
10        privateMethod();
11    }
12 }
 
1var newfun1 = new myfun1();
2 newfun1.public1(); //这是私有属性
3 alert(newfun1.publicvar);//这是实例属性
4 alert(newfun1.private1); // undefined   newfun1.privateMethod(); //运行错误
 
1function myfun2(){
2 }
3 myfun2.staticvar = "这是静态属性";
4 myfun2.staticmethod = function(){
5    alert(myfun2.staticvar);
6 }
7var newfun2 = new myfun2();
8//newfun2.staticmethod();//运行错误;
9 alert(newfun2.staticvar);//undefined
 
1//静态私有成员
2var myfun3 = (function(){
3   function privateProperty(){
4   
5    }
6    privateProperty.staticvar = "这是静态私有成员";
7    privateProperty.staticmethod = function(){
8        alert(privateProperty.staticvar);
9    }
10    privateProperty.staticmethod();
11   return privateProperty
12 })();
1//静态类
2var funcount = 0;
3var myfun4 = new function(){
4    funcount++;
5   this.printCount = function(){
6        alert(funcount);
7    }
8 }
9 myfun4.printCount(); //输出1;
10 myfun4.printCount(); //输出1;
11 myfun4.prototype.amethod = function(){
12    alert("原型对象");
13 }//运行错误
14var newfun4 = new myfun4();
15 newfun4.amethod();
 
 
1//运行错误,说明myfun3创建并实例化之后就不能再为它添加方法,属性
2new myfun3.constructor().printCount();//如果你确实想实例化,这样也可以.
3//原型继承
4var myfun5 = function(){
5
6 }
7 myfun5.prototype.myfun5_extend = function(){
8    alert("这是原型继承的");
9 }
10var myfun5_sub = function(){
11
12 }
13 myfun5_sub.prototype = new myfun5();
14var newfun5 = new myfun5_sub();
15 newfun5.myfun5_extend(); //这是原型继承的
16//调用继承
17var myfun6 = function(){
18   this.method_p = function(){
19        alert("这是调用继承的");
20    }
21 }
22var myfun6_sub = function(){
23    myfun6.call(this);
24 }
25
26var newfun6 = new myfun6_sub();
27 newfun6.method_p();//这是调用继承的
28//覆盖
29var myfun7 = function(){
30   this.method = function(){
31        alert("这是父对象方法");
32    }
33 }
34var myfun7_sub = function(){
35   this.method = function(){
36        alert("这是子对象方法");
37    }
38 }
39 myfun7_sub.prototype = new myfun7();
40var newfun7 = new myfun7_sub();
41 newfun7.method(); //这是子对象方法,父对象方法被覆盖了.
42//多态
43function myfun8(a, b){
44   var a = a;
45   var b = b;
46   if (typeof a == "number" &&typeof b == "number") {
47        alert(a * b);
48    } else if (typeof a == "string" &&typeof b == "string") {
49        alert(a + b);
50    } else {
51        alert("输入错啦");
52    }
53 }
54
55 myfun8(3, 4); // 输出12;
56 myfun8("hi,","你好");//输出hi,你好;
57 myfun8("hi", 5);//输入错啦.

  

0 0