javascript对象、类与原型链

发布时间:2019-06-20 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了javascript对象、类与原型链脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

js是一个基于对象的语言,所以本文研究一下js对象和类实现的过程和原理。

对象的属性及属性特性

下面是一个对象的各个部分:

VAR PErson = {
  name: "Lily",
  age: 10,
  work: function(){
    console.LOG("Lily is working...");
  }
};
person.gender = "F"; //可以动态添加属性
Object.definePRoperty(person, "salary", {  //添加属性
  value: 10000,
  wrITable: true,  //是否可写,默认false
  enumerable: true,  //是否可枚举,默认false
  configuration: true  //是否可配置,默认false;
});
Object.defineProperties(person, {  //添加多个属性
  "father": {
    value: Bob,
    enumerable: true
  },
  "mather": {
    value: Jelly,
    enumerable: true
  }
});
delete person.age; // 删除属性
Object.getOwnPropertyDescriptor(person, "father"); //{
value:10000,writable:true,enumerable:true,configuration:true}

是否可写指得是其值是否可修改;
是否可枚举指的是其值是否可以被for...in...遍历到;
是否可配置指的是其可写性,可枚举性,可配置性是否可修改,并且决定该属性可否被删除。

这是一个普通的对象和常见操作,不多说,下面是一个具有get/set的对象:

var person = {
  _age: 11,
  get age(){
    return this._age;
  },
  set age(val){
    this._age = val;
  }
};
//如下方法访问:
console.log(o.age); //读
o.age = 30;  //写
console.log(o.age);

对象的特性

上文,我们只提到了对象属性的4个性质,对象自己其实也有3个性质:

可扩展性

可不可扩展是指一个对象可不可以添加新的属性;Object.preventextensions 可以让这个对象变的不可扩展。尝试给一个不可扩展对象添加新属性的操作将会失败,但不会有任何提示,(严格模式下会抛出TypeError异常)。Object.preventExtensions只能阻止一个对象不能再添加新的自身属性,仍然可以为该对象的原型添加属性,但__proto__属性的值也不能修改。