读书笔记 - js高级程序设计 - 第六章 面向对象的程序设计
|
EcmaScript有两种属性
|
数据属性 和 访问器属性
|
|
数据属性有4个特性
|
Configurable
Enumerable
Writable
Value
前三个值的默认值都为false
举例
Object.defineProperty( person, "name", { writable:false, value:"niko"} ) ;
一旦属性定义为不可配置的,就不能再把它变回可配置的了
|
|
读取属性 的特性
|
var descriptor = Object.getOwnPropertyDescriptor( book, "_year" )
descriptor.value
descriptor.configurable
|
|
使用构造函数模式创建对象
|
function Person( name,age,job ){
this.name = name ;
this.age = age ;
this.sayName = function(){
alert( this.name )
}
}
|
|
用原型模式创建对象
|
function Person(){}
Person.prototype.name = "jeff";
Person.prototype.age = 28
好处是 可以让所有对象实例共享它所包含的属性和方法,
Person.prototype指向了原型对象 而Person.prototpe.constuctor 又指向了Person
|
|
判断类型
|
Person.prototype.isPrototypeOf( person1 ) // true
Object.getPrototypeOf( person1 ) == Person.prototype ) ; //true
|
|
判断一个属性是在原型中,而不是在实例中
|
function hasPrototypeProperty( object, name ){
return !object.hasOwnProperty( name ) && ( name is object ) ;
|
|
取得对象上所有可枚举的实例属性
|
Object.keys() 方法
|
|
如果你想要得到所有实例属性,无论它是否可枚举,都可以用方法
|
Object.getOwnPropertyNames() d
var keys = Object.getOwnPropertyNames( Person.prototype );
//"constructor name age job sayName
|
|
使用constructor不能确定对象的类型
|
var friend = new Person()
friend instanceof Object //true
friend instanceof Person //true
friend.constructor == Person // false
friend.constructor == Object // true
|
|
实例 和 原型 之间通过什么链接
|
只是一个指针 而非副本
|
|
在原生对象的原型上添加方法
|
String.prototype.startWith = function(text) { return this.indexOf(text) == 0 }
var msg = "hello world"
msg.startWith("hello");
|
|
原型对象的缺点
|
最大问题是 由其共享的本性所导致的
function Person(){}
Person.prototype = { constructor:Person, name:"nico",friends:["a","b"]}
var p0 = new Person();
var p1 = new Person();
p0.friends.push("c");
那么p1的friends里也会有c
|
|
组合使用构造函数模式 和 原型模式
|
构造函数模式用于定义 实例属性 ,而原型模式用于定义方法和共享的属性
function Person( name, age, job ){
this.name = name;
this.age = age ;
this.job = job ;
}
Person protytype = {
constructor:Person,
sayName: function(){
alert( this.name ) ;
}
}
|
|
动态原型模式
|
function Person( name, age, job ){
this.name = name
this.age = age ;
this.job = job ;
if( typeof this.sayName != "function" ){
Person.prototype.sayName = function(){} ;
}
}
|
|
寄生构造函数模式
|
待补
|
|
稳妥构造函数模式
|
待补
|
|
继承
|
待补
|
读书笔记 - js高级程序设计 - 第六章 面向对象的程序设计的更多相关文章
- JavaScript高级程序设计-第六章面向对象的程序设计
创建对象主要的两种形式,创建Object实例和创建对象字面量 对象包含属性和方法 数据 .属性有四个特性,特性是为了描述属性行为的,他们是: Configurable(可配置的)是否能删除或是否能修改 ...
- 读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图
读书笔记 - js高级程序设计 - 第十三章 事件 canvas 具备绘图能力的2D上下文 及文本API 很多浏览器对WebGL的3D上下文支持还不够好 有时候即使浏览器支持,操作系统如果缺缺 ...
- R in action读书笔记(3)-第六章:基本图形
第六章 基本图形 6.1条形图 条形图通过垂直的或水平的条形展示了类别型变量的分布(频数).函数:barplot(height) 6.1.1简单的条形图 6.1.2推砌条形图和分组条形图 如果hei ...
- 读书笔记 - js高级程序设计 - 第五章 引用类型
引用类型 和 类 不是一个概念 用typeof来检测属性是否存在 typeof args.name == "string" 需要实验 访问属性的方法 .号和[] 一般情况下要 ...
- 读书笔记 - js高级程序设计 - 第十二章 DOM2和DOM3
Node类型的变化 访问元素的样式 myDiv.style.backgroundColor = "red" myDiv.style.width = "100px& ...
- 读书笔记 - js高级程序设计 - 第十一章 DOM扩展
对DOM的两个主要的扩展 Selectors API HTML5 Element Traversal 元素遍历规范 querySelector var body = document.query ...
- 读书笔记 - js高级程序设计 - 第七章 函数表达式
闭包 有权访问另一个函数作用域中的变量的函数 匿名函数 函数没有名字 少用闭包 由于闭包会携带包含它的函数的作用域,因此会比其它函数占用更多的内存.过度使用闭包可能会导致内存占用过多,我们建议读者 ...
- 读书笔记 - js高级程序设计 - 第四章 变量 作用域 和 内存问题
5种基本数据类型 可以直接对值操作 判断引用类型 var result = instanceof Array 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这 ...
- 读书笔记 - js高级程序设计 - 第三章 基本概念
启用严格模式 "use strict" 这是一个 pragma 编译指示 让编码意图更清晰 是一个重要原则 5种简单数据类型 Undefined Null Boolean Num ...
随机推荐
- POJ 3274:Gold Balanced Lineup 做了两个小时的哈希
Gold Balanced Lineup Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13540 Accepted: ...
- zigbee CC2530首选方案模组:TZU06A1
模块特点 微型24-pin 邮票式SMT 封装 提供U.FL 接口,用于外接SMA 天线 小尺寸封装:16mm*20mm*3.7mm 通过欧盟CE0168.欧盟ROHS 认证 基于8051 单片机架构 ...
- 零距离初体验uboot
一.uboot配置编译步骤 1.开发板光盘的BSP 2.复制到虚拟机,tar -jxvf qt_x210v3_130807.tar.bz2 3.配置:make x210_sd_config 4.出现C ...
- 利用pandas,处理每天的点名。。
学以致用,,最近的疫情,导致每天都要向学校汇报班上同学的情况,可是每次提交的人总是慢半拍,为了快速找出谁还没有提交检查表,利用最近学的知识,快速检查提交名单.方便你我他. 上代码: import pa ...
- Python连载61-tkinter三种布局
一.pack布局举例 #pack布局案例 import tkinter baseFrame = tkinter.Tk() #以下代码都是创建一个组件,然后布局 btn1 = tkinter.Butto ...
- 文献阅读报告 - Social BiGAT + Cycle GAN
原文文献 Social BiGAT : Kosaraju V, Sadeghian A, Martín-Martín R, et al. Social-BiGAT: Multimodal Trajec ...
- P1049 数列的片段和
P1049 数列的片段和 转跳点:
- Metasploitable学习(一)
划红线的是执行语句,对已知的服务器的IP地址进行扫描.嗅探
- Photoshop 更换证件照底色
1.打开photoshop CS6. 2.打开照片 (上栏)文件---->打开 或者,直接把照片拖进ps中. 3.复制图层 右击背景,点击复制图层 (复制图层的作用是,如果对图层操作错误,可以 ...
- HDU 4902 Nice boat 多校4 线段树
给定n个数 第一个操作和普通,区间覆盖性的,把l-r区间的所有值改成固定的val 第二个操作是重点,输入l r x 把l-r区间的所有大于x的数,变成gcd(a[i],x) a[i]即指满足条件的序列 ...