~~~持续更新,面向对象的编程,个人浅见

看了很多大佬的blogs和文章,越来越觉得js基础的重要性,无论是各类开源框架还是三方的类库,唯有扎实js基本功才能驾驭,对今后造轮子也大有裨益。最近正在晒网期,来慢慢学习一下。本人语言表达能力很差,随便写来自己看看。

一、对象

   JavaScript中所有的事物都是对象,包括如 String、Date、Array 等等。对象是带有属性和方法的特殊数据类型

    这里就不说创建对象的方式了,一般的对象都可以转换成以下形式:

    var person={

      name:"Lucy",

      age:22,

      Job:"Software Engineer",

      sayName:function(){

        consoe.log("my name is“+this.name)

      }

   }

二、属性类型

  前面说了,对象是带有属性和方法的特殊数据类型。在ES5中用attribute描述属性的特征,通常用[[]]包含特征值 ,eg:[[Enumerable]]

ECMAScript中的属性有两种:数据属性和访问器属性

1.数据属性

  数据属性有4个描述属性的特征

  [[Configurable]]:表示能否通过delete 删除属性而重新定义属性,默认为true

  [[Enumerable]]:表示能否通过for-in循环遍历属性,默认true

  [[Writable]]:能否修改属性的值,默认true

  [[Value]]:属性的值,默认为undefined

 ES5定义了一个Object.defineProperty()方法来修改这些这些默认特征,请记住这个方法

方法接受三个参数:对象名称,属性名称及描述符,eg:

var person={}

Object.defineProperty(person,"name",{

  writable:false,

  value:"Lucy"

});

console.log(person,name)//"Lucy"

person,name="Bob"

console.log(person,name)//"Lucy"    在严格模式下会报错 

2.访问器属性

访问器属性同样包含4个特征

[[configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或能否把属性修改为访问器属性,默认为false

 [[enumerable]]:表示能否通过for-in循环返回属性,默认为false

 [[Get]]:在读取属性时调用的函数,默认值为undefined

 [[Set]]:在写入属性时调用的函数,默认值为undefined

访问器属性跟数据属性不同,不能在创建函数的时候直接定义,只能通过Object.definedproperty()来定义,

这边懒得写了,借用别人的图片展示一下

打印结果

特别要注意,数据属性和访问器属性除了定义方式不同,其两个特征的默认值也是不同的。

原文地址:https://www.cnblogs.com/liuxin-673855200/p/9950811.html