javascript面向对象--定义对象,1

javascript本身不是完全面向对象的哦。。另外,它是一种动态语言,所谓动态,一开始我以为解释执行的就是动态,后来才知道不是。。。像java和C#,他们的属性和方法,一旦定义了,就不能够改变了,而动态语言,可以动态地增加、删除对象的属性和方法。。够牛哦

定义javascript的对象其实有三种方法:

(1)使用Object对象。

Object是js内置的。比如代码1:

代码1:

1     var  widget= new Object();  //声明一个对象;
2 widget.width = "300px"; //width属性
3 //等等,width哪里来的?js是动态语言,width属性是动态加到obj上的,不像C#,java一样,必须先声明类的属性哦。。
4 widget.show = function(){
5 alert(this.width);
6 }
7 widget.show();

既然javascript可以动态增减属性,那怎么删除属性呢?接代码1:

widget.width = undefined 或者delete widget.width;

然后:alert(widget.width);

会弹出:undefined;

(3) JSON样式的对象,比如代码2:

代码2:

1 var widget = {
2 "width":"300px",
3 "show":function(){
4 alert(widget["width"]);
5 }
6 };
7 widget.show();

在代码2里,初学的可能会以为var widget={} 是一个类的定义,那么使用这个类,为什么不去new一个对象呢?

实际上 var widget={} 本身是一个对象,直接用。。。

其中的属性”width","show" 的双引号,可要可不要;

另外调用属性,我们可以看到两种方式,第一种是用点号加属性名,如 widget.show(); 第二种则是中括号的形式, 比如 widget["width"];

当然还有第三种,借助eval()函数,比如,将代码2里的第7行改为以下两行代码:

1 var str =" widget.show()"; 
2 eval(str);

打到一样的效果,麻烦吗?麻烦,但是,借助于eval这个函数调用属性,适用于那些属性名字不知道的情况。。。

(3)第三种定义对象的方法,比较麻烦。----function,比如代码3

代码3:

 1 function widget(width) {
2 this.width = width;
3 }
4 widget.prototype = {
5 show:function(){
6 alert(this.width);
7 }
8 };
9 var w = new widget("300px");
10 w.show();

在javascript里,函数是第一公民,对象可以通过function去创建;这里借助了new关键字;

代码1-3,是一个构造函数。给对象的width属性赋值;通常模拟创建一个类的时候,在构造函数里只给属性赋值,而在prototype原型里写方法的定义,自然,按照如下的方式去做也不错:

代码4:

1 function widget(width) {
2 this.width = width;
3 this.show = function(){
4 alert(this.width);
5 }
6 }
7 var w = new widget("300px");
8 w.show();

看起来代码4更有可读性,方法和属性都放到一个function里了。。。但是, 常常采用代码3而弃代码4,

这样做的好处是:创建多个widget对象的时候,不必反复创建方法show()的副本。。。

---待续。。