JavaScript 弱类型
我们说JavaScript 是一种弱类型的语言,一方面体现在JavaScript 的变量、参数和返回值可以是任意类型,另一方面也体现在,JavaScript 可以对对象任意添加属性和方法,这样无形中就淡化了“类型”的概念。
对象的三种基本构造法
//第一种构造法:new Object
var a = new Object();
a.x = 1, a.y = 2;
//第二种构造法:对象直接量
var b = {x : 1, y : 2};
//第三种构造法:定义类型
function Point(x, y)
{
this.x = x;
this.y = y;
}
var p = new Point(1,2);
//var user=new Object();
1.添加属性,方法
user.name="hongda";
user.alert=function(){alert(this.name);}
2.修改属性,方法
user.name="hongdada";
user.alert=function(){alert("my name is "+this.name);}
3.删除属性,方法
user.name=undefined;
user.alert=undefined;
属性和方法的类型
JavaScript 里,对象的属性和方法支持4 种不同的类型,
第一种类型就是前面所说的私有类型,它的特点是对外界完全不具备访问性,要访问它们,只有通过特定的getter 和setter。
第二种类型是动态的公有类型,它的特点是外界可以访问,而且每个对象实例持有一个副本,它们之间不会相互影响。
第三种类型是静态的公有类型,或者通常叫做原型属性,它的特点是每个对象实例共享唯一副本,对它的改写会相互影响。
第四种类型是类属性,它的特点是作为类型的属性而不是对象实例的属性,在没有构造对象时也能够访问.
<!-- function dwn(s) { document.write(s + "<br/>"); } function myClass() { var p = 100; //private property; 私有属性 this.x = 10; //dynamic public property 动态公有属性 } myClass.prototype.y = 20; //static public property or prototype property 原型属性 myClass.z = 30; //static property //静态属性 var a = new myClass(); dwn(a.p); //undefined 私有属性对象无法访问到 dwn(a.x); //10 公有属性 dwn(a.y); //20 公有属性 a.x = 20; a.z = 40; dwn(a.x); //20 dwn(a.y); //40 //动态公有属性y 覆盖了原型属性y delete(a.x); delete(a.y); dwn(a.x); //undefined 动态公有属性x 被删除后不存在 dwn(a.y); //20 动态公有属性y 被删除后还原为原型属性y dwn(a.z); //undefined 类属性无法通过对象访问 dwn(myClass.z); //30 类属性应该通过类访问 -->
私有属性(不能被该类的prototype访问)
function class1(){ var pp=" this is a private property"; //私有属性成员pp function pm(){ //私有方法成员pm,显示pp的值 alert(pp); } this.method1=function(){ //在公有成员中改变私有属性的值 pp="pp has been changed"; } this.method2=function(){ pm(); //在公有成员中调用私有方法 } } var obj1=new class1(); obj1.method1(); //调用公有方法method1 obj1.method2(); //调用公有方法method2
这些局部变量(私有成员),被所有在构造函数中定义的公有方法所共享,而且仅被在构造函数中定义的公有方法所共享。
这意味着,在prototype中定义的类成员将不能访问在构造体中定义的局部变量(私有成员)。
静态属性
function class1(){//构造函数 } //静态属性 class1.staticProperty=”sample”; //静态方法 class1.staticMethod=function(){ alert(class1.staticProperty); } //调用静态方法 class1.staticMethod();