当前位置: 首页 > news >正文

javascript面向对象之创建对象

对象定义

对象定义:无序属性的集合,其属性可以包含基本值、对象或函数
对象就是 键值对 其中值可以是数据和函数
对象方法就是对象的属性 不过这个属性是函数

var p = new Object()

p.name = 'nike'
p.age = '10'
p.job = 'joker'

p.sayName = function() {
  console.log(this.name)
}
console.log(p.age)//10
p.sayName()       //nike
var p = {
  name: 'nike',
  age: '10',
  job: 'joker',
  sayName: function(){
    console.log(this.name)
  }
}

console.log(p.job)//joker
p.sayName()       //nike

属性类型

数据属性

Configurable:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特
性,或者能否把属性修改为访问器属性。像前面例子中那样直接在对象上定义的属性,它们的这个特性默认值为 true。
Enumerable:表示能否通过 for-in 循环返回属性。像前面例子中那样直接在对象上定
义的属性,它们的这个特性默认值为 true。
Writable:表示能否修改属性的值。像前面例子中那样直接在对象上定义的属性,它们的
这个特性默认值为 true。
Value:包含这个属性的数据值。读取属性值的时候,从这个位置读;写入属性值的时候,把新值保存在这个位置。这个特性的默认值为 undefined。
修改这 3 个值需要用 es5 的Object.defineProperty()方法

这个方法接收 3 个参数:属性所在的对象、属性的名字、描述符对象

描述符对象的属性必须是:configurable enumerable writeble value

var person = {}
Object.defineProperty(person, 'name', {
  writable: true,
  value: 'nike' 
})
console.log(person.name)//nike
person.name = 'gray'
console.log(person.name)//gray
var person = {}
Object.defineProperty(person, 'name', {
  configurable: true,
  value: 'nike'
})
console.log(person.name)//nike
delete person.name
console.log(person.name)//undefined

访问器属性

Configurable:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性。对于直接在对象上定义的属性,这个特性的默认值为true
Enumerable:表示能否通过 for-in 循环返回属性。对于直接在对象上定义的属性,这个特性的默认值为 true。
Get:在读取属性时调用的函数。默认值为 undefined。
Set:在写入属性时调用的函数。默认值为 undefined

var person = {
  oldname: 'jac',
  age: '10'
}

Object.defineProperty(person, 'newname', {
  get: function(){
    return this.oldname
  },
  set: function(value){
    this.oldname = value
  }
})

person.newname = 'bool'
console.log(person.oldname)//bool

//设置一个属性的值会导致其他属性的变化
var person = {
  name: 'handsome'
}

Object.defineProperties(person, {
  boy: {
    get: function () {
      return this.name + ' hua'
    },
    set: function (value) {
      return this.name = value
    }
  },
  man: {
    get: function () {
      return this.name
    },
    set: function (value) {
      return this.name = value
    }
  },
  year: {
    value: 20
  }
})

console.log(person.boy)//handsome hua
console.log(person.man)//handsome
//如果person的name有值,就不要对name再设置 get set
var descriptor = Object.getOwnPropertyDescriptor(person, "year")
//属性所在的对象、要读取其描述符的属性名称
console.log(descriptor.value)//20

相关文章:

  • 由中序和后序重建二叉树
  • SpannableString实现TextView的链接效果
  • jquery.validate.js使用之自定义表单验证规则
  • 特斯拉Gigafactory将结合Silevo和松下HIT太阳能技术
  • 007-df和du的使用
  • thrift TTransport
  • 《浅谈图论模型的建立与应用》
  • 从顶层设计出发 联想集团与泛华集团共画中国智慧城市蓝图
  • 让SCv2000来拯救企业存储的选择困难症
  • 东软RealSight用大数据给企业做“天气预报”
  • 关于使用flying-saucer-pdf,实现xhtml2pdf
  • 做了一个小游戏,结项目,数数坑(animate,移动端长按出现菜单,touchmove,禁止微信上下滑屏)...
  • 黑客查理·米勒:用一个按键黑掉一辆车
  • php之变量
  • 12、sed、awk、数组 学习笔记
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • download使用浅析
  • Druid 在有赞的实践
  • express如何解决request entity too large问题
  • IndexedDB
  • java2019面试题北京
  • Java超时控制的实现
  • Java小白进阶笔记(3)-初级面向对象
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Unix命令
  • Vue2.0 实现互斥
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 世界上最简单的无等待算法(getAndIncrement)
  • 我是如何设计 Upload 上传组件的
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (算法)N皇后问题
  • (转)ABI是什么
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)shell调试方法
  • (转)重识new
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET建议使用的大小写命名原则
  • .NET学习全景图
  • /etc/fstab 只读无法修改的解决办法
  • /etc/sudoers (root权限管理)
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • @RequestParam详解
  • [bug总结]: Feign调用GET请求找不到请求体实体类
  • [bzoj 3534][Sdoi2014] 重建
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)