js的数据属性:P139
(1)[[Configurable]]
(2)[[Enumerable]]
(3)[[Writable]]
(4)[[Value]]

使用Object.definerPropert()方法修改属性的默认值,接收的参数:
(1)属性所在的对象
(2)属性的名字
(3)一个描述符对象(Configurable,Enumerable,Writable,Value)

 // 'use strict'
var person = {
name: "Jack",
age: 12,
job: "Software Engineer",
sayname: function(){
console.log(this.name);
}
};
console.log(person.name);//Jack person.name = "Mei";
console.log(person.name);//Mei Object.defineProperty(person,"name",{
writable: false,
value: "Nice"
})
console.log(person.name);//Nice person.name = "Li";//在非严格模式下,赋值操作会被忽略,严格模式下,会抛出错误。Uncaught TypeError: Cannot assign to read only property 'name' of object '#<Object>'
console.log(person.name);//Nice Object.defineProperty(person, "name", {
configurable: false,//设置为false则不能修改属性的特性。
value: "Nice"
}) Object.defineProperty(person, "name", {
configurable: true, // TypeError: Cannot redefine property: name at Function.defineProperty (<anonymous>) at js_tesr.html:37
value: "Nice"
}) Object.defineProperty(person,"name",{
writable:true //Uncaught TypeError: Cannot redefine property: name at Function.defineProperty (<anonymous>)
//将writable设置为false则不报错。
}) Object.defineProperty(person,"name",{});//疑问:P140倒数第三行: 三个属性默认为false,但是这里还是可以修改name的属性值。
person.name = "Li";
console.log(person.name);//Li //2.访问器属性
//设置一个属性导致其他属性发生变化 var book = {
year:2004,
edition : 1
}; Object.defineProperty(book,'year',{
//get:在读取属性时调用的函数
get: function(){
return this._year;//_下划线表示只能通过对象方法访问到的属性
}, //set:在写入属性时调用的函数
set: function(newValue){
if(newValue > 2004){
this._year = newValue;
this.edition += newValue - 2004;
}
}
}); book.year=2005;
console.log(book.edition);// //访问器属性——模拟vue双向数据绑定功能。
var obj ={};
Object.defineProperty(obj, "hello",{
//写入属性时调用的函数
set :function(newVal){
document.getElementById("input").value = newVal;
document.getElementById("content").innerHTML = newVal;
}
});
document.addEventListener("keyup",function(e){
obj.hello = e.target.value;
});

JS_高程6.面向对象的程序设计(1)理解对象的更多相关文章

  1. js面向对象的程序设计 --- 上篇(理解对象)

    前言 ECMAScript中没有类的概念,因此它们的对象与基于类的语言中的对象有所不同. ECMA-262把对象定义为:"无序的集合属性,其属性可以包含基本值,对象或者函数".正因 ...

  2. JS_高程6.面向对象的程序设计(2)创建对象_1

    一.创建对象的常见方法 (1)Object构造函数创建单个对象,早期的JavaScript开发人员经常使用该模式创建新对象. var person=new Object(); person.name= ...

  3. JS_高程6.面向对象的程序设计(2)创建对象_3 构造函数存在的问题

    # 上次讲到用构造函数的模式来创建对象,相对于工厂模式,解决可对象识别的问题. function Person(name,age,job){ this.name=name; this.age=age; ...

  4. JS_高程6.面向对象的程序设计(2)创建对象_2 构造函数也是一般函数

    1.构造函数也是一般函数,以下创建一个构造函数. var Person=function(name,age,job){ this.name=name; this.age=age; this.job=j ...

  5. JS面向对象的程序设计之理解对象

    一.对象定义 (1)ECMAScript中没有类的概念,因此它的对象也与基于类的语言中的对象有所不同: (2)ECMA-262把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数” 二. ...

  6. javascript 面向对象程序设计--深刻理解对象

    javascript中,每个对象都是基于一个引用类型创建的,我们可以把ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数. 深刻理解对象 创建自定义对象的最简单方式就 ...

  7. JavaScript--我发现,原来你是这样的JS:面向对象编程OOP[1]--(理解对象和对象属性类型)

    一.介绍 老铁们,这次是JS的面向对象的编程OOP(虽然我没有对象,心累啊,但是可以自己创建啊,哈哈). JS高程里第六章的内容,这章内容在我看来是JS中很难理解的一部分.所以分成三篇博客来逐个理清. ...

  8. JS--我发现,原来你是这样的JS:面向对象编程OOP[1]--(理解对象和对象属性类型)

    一.介绍 老铁们,这次是JS的面向对象的编程OOP(虽然我没有对象,心累啊,但是可以自己创建啊,哈哈). JS高程里第六章的内容,这章内容在我看来是JS中很难理解的一部分.所以分成三篇博客来逐个理清. ...

  9. 《JavaScript高级程序设计》第六章【面向对象的程序设计】 包括对象、创建对象、继承

    一.理解对象 二.创建对象      1. 工厂模式      2. 构造函数模式      3. 原型模式      4. 组合使用构造函数模式和原型模式[使用最广泛]      5. 动态原型模式 ...

随机推荐

  1. JVM 方法区内存扩大 以及开启GC

    因为应用使用了OSGi框架,<深入理解JAVA虚拟机>中对使用OSGi时可能产生的方法区溢出有所描述 第一部分: 第二部分 可见,OSGi会动态生成大量Class,在OSGi中,即使是同一 ...

  2. Quartz.net 2.4.1 使用记录

    项目需要开发一个调度任务工具,用于

  3. table无法控制宽度

    table-layout:fixed

  4. elemnt UI点击事件失效,得到tab的序号

    在用element 的tab的时候发现  事件绑定没有作用 看了官网才知到内置有回掉函数 绑定的地方是 <el-tabs></el-tabs> <template> ...

  5. ArrayList类中的contains()方法底层依赖的是equals()方法

    ArrayList类中的contains()方法底层依赖的是equals()方法.若集合中的元素是自定义对象,则应该重写该类父类Object的equals()方法,否则对象永远都不相同(因为都是new ...

  6. Linux下C语言的文件操作

    代码: #include <stdio.h> #include <string.h> #include <fcntl.h> /*************基本的函数A ...

  7. 基本标签-html-1

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 用jquery设置的值,miniui.getData取不到

    用jquery设置的值,miniui.getData取不到

  9. Date、Calendar、DateFormat类

    Date类与Calendar类之间的转换 package date; import java.util.Calendar; import java.util.Date; public class Da ...

  10. 最佳linux文件WINDOWS上传下载方法

    通常,利用SSH管理远程Linux服务器时,经常需要与本地交互文件.当然,我们可以利用FTP方式,比如通过Filezilla客户端软件.不过直接使用SSH软件(SecureCRT.Xshell)自带的 ...