js的类与对象

一:对象的创建

    js中的对象创建比较灵活,正因为比较灵活,所以灵活使用难度较大.

  • 使用new Object关键字
 var Person =new Object( {
			 name:"liming",
			 age:20,
			 people:{sense:"Hello,World",t:function(){return "I am t"}},//对象里面可以嵌套对象
			 test:function(){ 
			 return this.name+this.age;
			 }
			 }  )
    delete Person.name;//删除对象的属性,一般格式为delete object.property(method)或者object.property(method)=undefined
	Person.hobby="football";//添加对象的属性,直接object.property="xxx"
	Person.hobby="basketball";//修改对象的属性,直接object.property="xxx"

注意:new Object 可以省略,此方法为object的对象

  • 构造函数法
function Test() //大写,与其他函数办法区分
    {
	   var ownSex="女";//私有属性,只能自己访问
	  this.name="liming";//公有属性,都可以访问
	  this.age=20;
	  this.setSex=function(ownAge){//通过设置获得私有属性
		age=ownAge;
		}
	  this.getSex=function(){//通过方法获得私有属性
	      return age;
		}
      function test()//私有方法的属性获得需要改变指针,后续扩展。
		{
			console.log("xxx")
		}  

    
	}
	var t=new Test()
	console.log(t.name) //liming
	t.setSex("男");
    console.log(t.getSex())//男
  • 原型法

 function Test() //大写,与其他函数办法区分
    {
	   
	}
	Test.prototype.name="liming",
	Test.prototype.age=20
	Test.prototype.f=function()
	{
		return "xx";
	}
	var t=new Test()
	console.log(t.name) //liming
	console.log(t.age)//20
    console.log(t.f())


  • ECMAScript增强的对象模型

ECMAScript增强的对象模型增强了对象模型的控制力度,可以控制读取,写入,删除,枚举等等。

 /*
    此函数需要在严格模式下执行,如firefox=4,此外该方法支持多种属性一起写,支持set,get方法。  
    Object.defineProperty(obj,prop,desc)
    @param {
		obj:对象
		prop,字符串类型,用于指定属性名
		desc,对象,包含了对属性的描述
	} */
   
   
   function Person()
   {
   }
   Object.defineProperty(
   
    Person.prototype,"niceName",{
	   value:"test",
	   writable:true, //决定属性能否被赋值。
	   configurable:false,//决定该属性能否被删除或者改变特征值。
	   enumerable:true,//:决定 for in 能否枚举该属性。
   }
   
   )
    new Person().niceName="x5x"
	console.log(new Person().niceName)//test
  • Object.create(带扩展,想不明白)

  • ES6 中的类

 class Animal {
	 constructor(name) {
		 this.name = name;
		 }
		 speak() {
    console.log(this.name + ' makes a noise.');
	}
 }
 let A=new Animal("test") 
 A.speak();//test makes a noise.

二:遍历对象

  • for…in 可以获取自身可以枚举除symbol外的属性和原型属性
 function Person()
   {
	   this.name="liming",
	   this.age=20
   }
   Person.prototype.test="test"
   var p=new Person()
   for(item in new Person())
   {
	   console.log(item)//name age test
       
   }
  • Object.keys 和 Object.values 都只可以获取自身除了symbol外可枚举的属性和值不能获得原型链的
 function Person()
   {
	   this.name="liming",
	   this.age=20
   }
   Person.prototype.test="test"
   var p=new Person()
   console.log(Object.keys(p))//name age
   console.log(Object.values(p))//liming 20
  • Object.getOwnPropertyNames(obj)
    可以列出所有能枚举和不能枚举的属性,比object.keys()方法稍强,但不是不能实现向前兼容,因为ECMAScript3没有相关方法可以获得不能枚举的属性
function Person()
   {
	   this.name="liming",
	   this.age=20
   }
   Person.prototype.test="test"
   var p=new Person()
   console.log(Object.getOwnPropertyNames(p));//name test

三:密封对象和动态对象

  • 密封对象不允许添加成员
    Object.preventExtensions(obj)//严格模式下才可以执行

  • 密封对象不允许添加成员和删除成员
    Object.seal(obj)//严格模式下才可以执行
    Object.isSealed(obj)//严格模式下执行

  • 完全密封对象都是严格模式下才可以看到

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值