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();

 

posted @ 2013-01-15 13:03  hongdada  阅读(1005)  评论(0编辑  收藏  举报