公有属性 公有方法(原型方法) 私有属性 私有方法 特权方法 静态属性 静态方法 对象字面量创建
示例1
1 function text(a,b,c){ 2 var si='私有变量测试'; 3 this.b = b; 4 this.my = function(){ 5 console.log(c) 6 } 7 this.sy = function(si){ 8 console.log(si) 9 } 10 function ceshi(){ 11 console.log(a) 12 } 13 console.log(si); 14 /*私有变量和私有方法,只能在原型对象内执行 15 *实例化对象不继承 16 */ 17 } 18 text.prototype.css ={ 19 c : '3', 20 m:'无法用this', 21 mynew : function(){ 22 return this.c;//返回的是3,没有this的话返回Undefined 23 } 24 } 25 var new1 = new text('a','b','test3');//=>new方法创建实例对象时,会执行对应的原型对象 26 console.log(new1); 27 new1.my();//test3 =>特权方法可以在外部调用 28 text('a','b','test3'); 29 new1.sy('fdsa');//undefined =>外部实例化对象不继承私有变量;无法调用 30 console.log(new1.css.mynew('das')); //=>实例化调用公共方法,对象字面量 31 console.log(new1.css.m); //=>实例化调用公共方法(原型方法),对象字面量创建css公共方法 32 console.log(new1.css);
示例2
1 function user(name,age){ 2 //公有属性 3 this.name = name; 4 //私有属性 5 var age = age; 6 //私有方法 7 //=>私有方法在实例化New时执行,只能内部调用 8 function alertAge(age){ 9 console.log('alertAge:'+age); 10 }; 11 alertAge(age); 12 /*特权方法*/ 13 this.getName = function(){ 14 return name; 15 //注:在原型对象外创建的公共原型方法,return时需要添加this指向当前的name 16 } 17 } 18 user.age = 26;//静态属性 19 user.getName2 = function(){//静态方法 20 return this.myname; 21 }; 22 user.prototype.getName = function(){ //公有方法 23 return this.name; 24 } 25 var users = new user('实例名','实例年纪'); 26 console.log(user.age);//外部调用公有属性 27 console.log(users.age);//实例对象不继承私有属性 28 console.log(user.alertAge);//外部无法调用私有方法 29 console.log(users.alertAge);//实例化不继承私有方法 30 console.log(user.getName);//无实例化的情况下,只能调用私有属性和私有方法 31 console.log(users.getName());//=>调用特权方法 echo 实例名
部分摘自http://www.jb51.net/article/64278.htm
1 var obj = new c('hello world'); 2 function c(v){ 3 console.log(v); 4 this.faction = v; 5 } 6 console.log(obj) 7 console.log(obj.faction); 8 /*1.公有属性和公有方法*/ 9 function User(name,age){ 10 this.name = name;//公有属性 11 this.age = age; 12 } 13 User.prototype.getName = function(){ 14 //公有方法 15 return this.name; 16 } 17 var user = new User('fire子海',26); 18 console.log(user.getName());//output:fire子海 19 /*2.私有属性和方法*/ 20 function User(name,age){ 21 var name = name;//私有属性 22 var age = age; 23 function alertAge(){//私有方法 24 alert(age); 25 } 26 alertAge(age); //弹出26 27 } 28 var user = new User('fire子海',26); 29 /*3.静态属性和方法*/ 30 function User(){} 31 User.age = 26;//静态属性 32 User.myname = 'fire子海'; 33 User.getName =function(){//静态方法 34 return this.myname;//如果这里使用this.name,返回的将是User,所有改用了myname, 35 } 36 console.log(User.getName());//output:fire子海 37 /*4.特权方法*/ 38 function User(name,age){ 39 var name = name;//私有属性 40 var age = age; 41 this.getName = function(){ //特权方法 42 return name;//私有属性和方法不能使用this调用 43 } 44 } 45 var user = new User('fire子海',26); 46 console.log(user.getName());//output:fire子海 47 /*5.静态类*/ 48 var user = { 49 init:function(name,age){ 50 this.name = name; 51 this.age = age; 52 }, 53 getName:function(){ 54 return this.name; 55 } 56 } 57 user.init('fire子海',26); 58 console.log(user.getName());//output:fire子海 59 /*6.公有方法的调用规则*/ 60 function User(){ 61 this.myname = 'fire子海';//公有属性 62 this.age = 26; 63 this.do = function(){//特权方法 64 return this.myname+'学习js'; 65 } 66 } 67 User.eat = function(food){ 68 return '晚餐只有'+food; 69 } 70 User.prototype.alertAge = function(){ 71 alert(this.age); 72 } 73 User.prototype.alertDo = function(){ 74 alert(this.do());//调用特权方法 75 } 76 User.prototype.alertEat = function(food){ 77 alert(User.eat(food));//只能通过对象本身调用静态方法 78 //alert(this.ear(food))这样调用将出错:this.eat is not a function 79 } 80 var user = new User(); 81 user.alertAge();//alert:26 82 user.alertDo();//alert:fire子海学习js 83 user.alertEat('方便面')//alert:晚餐只有方便面 84 /*7.静态方法的调用规则*/ 85 function User(){} 86 User.age = 26;//静态属性 87 User.myname = 'fire子海'; 88 User.getName =function(){//静态方法 89 return this.myname; 90 } 91 var user = new User(); 92 console.log(user.getName);//TypeError: user.getName is not a function 93 user.supper = '方便面'; 94 user.eat = function(){ 95 return '晚餐只有'+this.supper; 96 } 97 user.eat();//晚餐只有方便面 98 /*8.特权方法的调用规则*/ 99 function User(girlfriend){ 100 var girlfriend = girlfriend; 101 function getGirlFriend(){ 102 return '我女朋友'+girlfriend+'是美女!'; 103 } 104 this.myname = 'fire子海';//公有属性 105 this.age = 26; 106 this.do = function(){//特权方法 107 return this.myname+'学习js'; 108 } 109 this.alertAge = function(){ 110 this.changeAge();//特权方法调用公有方法 111 alert(this.age); 112 } 113 this.alertGirlFriend = function(){ 114 alert(getGirlFriend());//调用私有方法 115 } 116 } 117 User.prototype.changeAge = function(){ 118 this.age = 29; 119 } 120 var user = new User('某某'); 121 user.alertAge();//alert:29 122 user.alertGirlFriend();//alert:我的女朋友某某是美女! 123 /*9.私有方法*/ 124 function User(girlfriend){ 125 var girlfriend = girlfriend; 126 this.myname = 'fire子海';//公有属性 127 this.age = 26; 128 function getGirlFriend(){ 129 //this.myname ;//此时的this指向的window对象,并非User对象, 130 // this.myname = 'fire子海',此时的this指向的是getGirFriend对象了。 131 //如果通过this调用了getGirFriend中不存在的方法呀属性,this便会指向window 对象,只有this调用了getGirlFriend存在的方法和属性,this才会指定getGirlFriend; 132 alert(User.eat('泡面'));//alert:晚餐只有方便面 133 } 134 this.do = function(){//特权方法 135 return this.myname+'学习js'; 136 } 137 this.alertAge = function(){ 138 this.changeAge();//特权方法调用公有方法 139 alert(this.age); 140 } 141 this.alertGirlFriend = function(){ 142 getGirlFriend();//调用私有方法 143 } 144 } 145 User.eat = function(supper){ 146 return '晚餐只有'+supper; 147 } 148 var user = new User('某某'); 149 user.alertGirlFriend();