javaScript深入学习[3]
来源:互联网 发布:物流软件定制开发 编辑:程序博客网 时间:2024/05/22 10:56
一、对象与继承
对象属性分为3种 ,数据属性 ,访问器属性 ,内置属性;
从对象中提取方法时会丢失this;可以使用bind()方法绑定;
方法中的函数会掩盖this;
A.isPrototypeOf(B)//检查A是否为B的原型
__proto__属性可以获取和设置对象的原型,并非所有引擎都支持
设置和删除仅影响自有属性,因为原型属性是共享的。
Object.getOwnPropertyNames(obj)//获取所有自有属性Object.keys(obj)//获取所有自有可枚举属性for(key in obj)//获取所有可枚举属性obj.hasOwnProperty(key)//对象是否有该自有属性
访问器继承
var proto = { get foo(){ return 'hello'} };var obj = Object.create(proto);obj.foo//hello
通过 ‘=’添加属性 Writable,Enumerable ,Configurable默认为true
而通过Object.defineProperty
或Object.defineProperties
时默认值为false
Object.create(prototype)//以prototype为原型创建对象Object.getPrototypeOf(obj)//获取对象原型Object.getOwnPropertyDescriptor(obj,key)//获取属性描述符
复制对象
function copyObject(orig){ var copy = Object.create(Object.getPrototypeOf(orig)) Ojbect.getOwnPropertyNames(orig).forEach((key)=>{ var desc = Object.getOwnPropertyDescriptor(orig ,key); Object.defineProperty(copy ,key ,desc); })}
保护对象 :
防止扩展 : Object.preventExtensions(obj)
不可添加属性,但是可以修改和删除;
封闭 : Object.seal(obj)
不可添加删除属性或修改属性修饰符,但可以修改值
冻结:Obejct.freeze(obj)
不可添加修改删除,但只对浅层属性有效,例如
var a = { data : [] }Object.freeze(a);a.data.push(1);a.data//[1]
构造函数的原型自带属性constructor指向构造函数,因此它的实例可以通过这个属性访问上一级的构造函数
手动实现new 操作符
function newOperator(Constr ,args){ var thisValue = Object.create(Constr.prototype); var result = Constr.apply(thisValue ,args); if(typeof result==='object' && result !== null){ return result } return thisValue}
术语 :两类原型 构造函数原型和实例原型;
instanceof 对于基本类型的值总是false;
123 instanceof Number //false
缺陷:
A instanceof B//类似于Object.getPrototypeOf(A) === B.prototype因此有Object.create(null) instanceof Object //falseObject.prototype instanceof Object //false// Object.prototype为原型链的末端
instanceof 跨域失效
阅读全文
0 0
- javaScript深入学习[3]
- 前端学习实践笔记--JavaScript深入【3】
- 深入学习javascript
- 深入学习javascript
- javascript 深入学习之一
- JavaScript深入学习[1]
- javaScript深入学习[2]
- 深入学习javascript
- javascript学习:深入学习变量
- 开始深入的学习javascript
- javascript 深入 学习
- 深入学习javascript(Function Array)
- JavaScript 对象深入学习总结
- JavaScript 对象深入学习总结
- JavaScript 对象深入学习总结
- 深入学习javascript--Module模式
- javascript深入学习之二
- 深入JavaScript学习底层内容
- stata14中文乱码问题
- python开启摄像头以及深度学习实现目标检测
- redis入门——linux下的安装
- servlet实现浏览记录功能
- Android 自定义下拉刷新上拉加载更多Listview
- javaScript深入学习[3]
- 并查集(1)梳理
- 使用kaldi进行特征提取时的问题记录
- 欢迎使用CSDN-markdown编辑器
- DenseNet
- JedisPool工具类
- gdb等待进程启动后调试
- WPF 实现简单的跑马灯
- 1007. 素数对猜想 (20)