javascript对象

  • js对象创建
//直接创建
var person = {name:"zhaomomo",sex:"man",age:"12"};

//通过new
var data = new Date();
var arr = new Array();
function Person(){
   this.name = "zhaomomo";
   this.sex = "man";
   this.age = "12";
}
var per = new Person();
  • 赋值

    js中的赋值其实是引用,下面的perother是对person的引用,改变perother同时改变着person

//直接赋值
var perother = person;
perother.name = "xiaoming";
console.info(person.name);   //xiaoming
  • 原型和原型链

    像上面的Person是个方法,每个js的方法都会有个prototype,我们管它叫原型,prototype中可以存储一些属性和方法,这样的Person就像一个类,Person后面的一个方法就像一个构造函数,而per像Person的一个对象。

Person.prototype.nationality = "china";
console.info(per.nationality;    //china
Person.prototype.talk = function(){
    console.info("talk");
}
per.talk();   //talk

    每个js对象中都有__proto__属性,我们管它叫原型链,__proto__是个隐性属性,应用原型链可以实现继承,上栗中的per.__proto__与Person.prototype相等,而Person又是js的Function继承的,所以Person.__proto__与Function.prototype相等,所以对象通过原型链与类形成了链条的关系,并且改变per的nationality的值不会改变原Person的nationality的值

per.nationality="USA";
console.info(person.nationality);   //"china"

    对象中的__proto__中有个隐含的构造属性constructor指向类的构造函数 ,constructor中包含了类中的公有静态属性和类方法,__proto__中包含类中的prototype中的属性和方法

  • Object.create创建对象
var a = {a1:1,a2:2};
var b = Object.create(a);
console.info(b.__proto__===a)   //true
b.a1 = 3;
console.info(a.a1)   //1

    Object.create是把a赋给b中的原型链,有点继承的味道

  • js不同的属性
function Person(){
   this.name = "zhaomomo";//公有属性
   this.sex = "man";
   this.age = "12";
   var heart = "warm"//私有属性
}

Person.like = "meimei";//公有静态属性,通过构造器访问
Person.work = function(){};//类方法,痛过构造器访问
Person.prototype.love = "xiaoli"//原型属性
Person.prototype.sleep = function(){};//原型方法
  • 属性

     对象中的两个方法,getter和setter可以重定义取对象和设置对象的方法

var o={
   get r(){
      console.info("get");
   },
   set r(value){
      console.info("set");
   }
}
o.r //get
o.r = "a" //set

    属性有四个特性,值(value),可写性(writable),可枚举性(enumerable),可配置性(configurable),通过Object.getOwnPropertyDescriptor()可获得对象属性特性的描述,通过Object.defineProperty()可以修改对象属性的特性,通过Object.prototype.toString.call(o).slice(8,-1)可以获得o的对象的类型信息

  • 检测属性

    o.hasOwnProperty("x");可以检测x是否是o的自有属性,继承的属性不是自有属性,propertyIsEnumerable()是hasOwnProperty()增强版,检测可枚举的自有属性,"x" in o,in可以检测o中赋undefined或null的属性,但是用delete删除属性in就检测不到了,for in 检测可枚举的属性

参考

http://blog.csdn.net/tyro_java/article/details/51153138

转载于:https://my.oschina.net/u/3386584/blog/867958

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值