对象构造器

来源:互联网 发布:上班时间 知乎 编辑:程序博客网 时间:2024/06/06 04:51

1.javascript对象

js是基于对象编程,js环境中所有元素的都是对象,js对象包括内置对象、宿主对象、自定义对象。

(1)内置对象:String、Number、Boolean、Function、Array等;

(2)宿主对象:Window、Document、Location、History等;

(3)自定义对象:通过自定义构造函数过程创建对象。

2. 创建对象的方式

(1)JSON格式创建对象,{变量:值,变量:值,...}

varobj={

 name:"张三",

 age:10,

 into:function(){alert(this.name+" "+this.age)};

}; 

(2)构造函数创建对象:var 对象 = new 函数名();

var obj = function clock(hour,minute,second){

  this.hour = hour;

  this.minute = minute;

  this.second = second;

  this.showTime = function(){

  alert(this.hour+":"+this.minute+":"+this.second);

  }

 }

•对象中成员:对象中一切都是属性,表示为键值对方式。JS中可以任意(随时)扩展属性,实现动态绑定。

varclock = new Object();

 clock.hour=12;

 clock.minute=10;

 clock.showHour=function(){alert(clock.hour);};

3.成员封装处理

命名空间:通过给当前对象定义命名空间,通过命名空间来进行对象二次封装

静态属性函数定义

任何一个函数都有一个prototype属性(原型)

所有prototype绑定的属性为静态属性,所有对象共有和共同操作,与成员属性相对的定义

成员属性

直接定义在构造函数中的属性

当前构造函数构造出来的每个对象独立拥有,并操作。

4.成员属性取值/赋值操作

直接通过对象调用方式对执行属性进行取值/赋值

借助中括号方式进行访问属性,并取值和赋值

提供get/set方法来进行取值/赋值操作(限制赋值内容)

get方法,提供属性获取函数

set方法,提供属性赋值函数

5.Object类

(1)Object构造方法调用创建对象:new方式调用和不用new的方式调用性质是一样的。如果不传任何参数,代表创建一个空的对象实例,参数传递的仍然是个对象,则返回的就是当前参数传递的对象;参数如果是一个原始类型的值,则返回该值对应的包装对象;参数如果传递的是null或者undefined,返回的是当前一个空对象实例。

var array = new Array();

           console.log(new Object());            //Object

           console.log(new Object(array));       //Array(0)

           console.log(new Object(1));           //Number

           console.log(new Object(true));        //Boolean

           console.log(new Object(null));       //Object

           console.log(newObject(undefined));   //Object

(2)Object是js内置构造函数,专门提供给我们构造新的实例,内置静态函数如下:

①create函数:用于创建一个新的实例,传递一个构造器原型

②hasOwnProperty函数:判断对象是否有某个特定的属性

o.hasOwnProperty("age")

③keys函数:获取当前所有可枚举的属性名

④defineProperty函数:给对象动态绑定单个属性

defineProperty单个属性绑定:Object.defineProperty(argu1,argu2,argu3);

第一个参数:目标对象(需要绑定属性的对象)

第二个参数:需要定义的属性或方法的名字(字符串格式)

第三个参数:目标属性所拥有的特性 : 4+2(JSON格式)

value:属性的值,给绑定属性赋值

writable:如果为false,属性的值就不能被重写,只能为只读

configurable:设置是否能重新配置,一旦为false,就不能再设置他的(value,writable,configurable、delete)

enumerable:是否能在for...in循环中遍历出来或在Object.keys中列举出来。

get/set:给当前属性取值和赋值时候分别触发的函数

⑤defineProperties函数:给对象动态绑定多个属性

defineProperties多个属性绑定:Object.defineProperties(argu1,argu2);

第一个参数:目标对象(需要绑定属性的对象)

第二个参数:JSON格式,同时绑定多个属性

⑥getOwnPropertyDescriptor函数:获取单个属性描述,参数1为对象,参数2为属性名

⑦getOwnPropertyDescriptors函数:获取多个属性的描述,参数1为对象,参数2为属性名数组

functionStudent(){

           var name = "张三";

           var age = 24;

           var sex ="女";

           this.getName = function(){

              return name;

           };

           this.setName = function(val){

              if(val.length>5||val==""||val==undefined){

                  throw new Error();

              }

              name = val;

           }

           this.getAge = function(){

              return age;

           };

           this.setAge = function(val){

              if(val<0||val>100){

                  throw new Error();

              }

              age = val;

           };

           this.getSex = function(){

              return sex;

           };

           this.setSex = function(val){

              if(!(val=="男"||val=="女")){

                  throw new Error();

              }

              sex = val;

           };

        }

        var stu = {

           _name:"",

           _age:24,

           _sex:"女",

           set name(val){},

           get name(){},

           set age(val){},

           get age(){},

           set sex(val){},

           get sex(){}

        }

       var stu = {};

       Object.defineProperties(stu,{

           _name:{

              value:"张三",

              writable:true,

              configurable:true,

              enumerable:true

           }

           name:{

              get:function(){

                  return this._name;

              }

              set:function(val){

                  this._name = val;

              }

           }

       });


原创粉丝点击