JavaScript面向对象(1)——理解对象

2025-11-10 02:29:15

1、面向对象的语言有一个标志,那就是class。而通过class可以创建任意多个具有相同属性和方法的对象。JavaScript与传统的面向对象语言(C++、Java、C#、PHP等)是不同的,它并没有类的概念,因此它的对象也与基于class的语言中的对象有所不同。

javascript对象是无序属性的集合,其属性可以包含基本值、对象或函数。我们可以把javascript的对象想象成散列表——对象的每个属性或方法都有一个名字,而且每个名字都映射到一个值,其中值可以是数据或函数。

javascript中每个对象都是基于引用类型创建的,这些类型可以说原生类型也可以是自定义类型。

写到这里我忽然想到了Go语言,go语言就是一个C+JavaScript+Python的结合体。随着自己对Go语言的深入学习,就愈能从中发现C、JavaScript和python的身影。

创建对象最简单的方法是创建一个Object的实例,然后再为它添加属性和方法。

2、var user = new Object();  

user.uname="jack";  

user.uage=17;  

user.SayHello= function () {  

    alert("Hello,my name is:"+this.uname);  

};  

  

user.SayHello(); 

3、上面是早期的javascript开发人员使用的创建对象的方式,现在创建这种对象的首选模式是用对象字面量。代码如下:

var user ={  

    uname:"jack",  

    uage:17,  

    SayHello:function(){  

        alert("Hello,my name is:"+this.uname);  

    }  

};  

  

user.SayHello();

4、JavaScript中属性可分为数据属性和访问属性两种。

数据属性有4个描述其行为的特性:

configurable:表示能否通过delete删除属性而从新定义属性,能否修改属性的特性,或能否把属性修改为访问器属性。它的值为true或false。

enumerable:表示能否通过for-in循环返回属性。它的值为true或false。

writable:表示能否修改属性的值。它的值为true或false。

value:包含这个属性的值。默认值为undefined。

5、var user ={  

    "uname":"jack",  

    "uage":17  

};  

  

Object.defineProperty(user,"uname",{writable:false,value:"jack"});  

  

user.uname="mxi4oyu";  

user.uage=71;  

alert(user.uname+":"+user.uage);

6、我们可以通过Object.defineProperty()方法来限制数据属性是否为只读,是否可迭代,是否可配置等。但通常我们很少用到这些高级功能。我们创建的对象,默认都是可配置,可迭代,可读写的。

访问属性也有4个特性,分别为:

configurable:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性。

enumerable:表示能够通过for-in循环返回属性。

get:在读取属性时调用的函数。默认值为undefined。

set:在写入属性时调用的函数。默认值为undefined。

访问属性不能直接定义,必须使用Object>defineProperty()来定义。如下面这个例子:

7、var student={  

    _name:"jack",  

    age:13  

};  

  

Object.defineProperty(student,"name", {  

    get:function () {  

  

    return "my name is: "+this._name;  

  

    },  

    set:function (newValue) {  

  

    this._name=newValue;  

    }  

});  

  

student.name="tom";  

alert(student.name); 

而定义多个属性,我们可以使用Object.defineProperties()方法,要读取属性的特性,我们可以使用Object.getOwnPropertyDescriptor()方法。这里就不再深入展开,留着给大家研究下。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢