分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

js 对象细节

发布时间:2023-09-06 01:27责任编辑:顾先生关键词:js

原型和原型链

在对象自身身上找不到指定属性时,就会到这个对象的原型上找,原型也是指向一个对象,在这个对象上还找不到对应属性,则继续到原型上来找...以上过程形成原型链。

访问对象的原型:obj.__proto__ 或者可以调用Object.getPrototypeOf(obj),返回的值也是obj.__proto__;

obj.__proto__ 和 obj.constructor.prototype 默认指向同一个对象,可以理解为默认情况下:obj.__proto__ = obj.constructor.prototype = xx

空对象{} 的构造函数为 Object

直接在空对象的原型上添加或修改属性,会作用到js的所有对象中,因为所有的js对象的原型链终点都是Object.prototype所指向的对象:

Object.getPrototypeOf({}).x=13;console.log([].x) ???//13

对象属性

以下方式添加的属性都是添加到对象身上。

var obj;obj = { ?x:123, ???method(){ ?????return 123 ???}};obj.y = 99;// function Person(){// ????this.a = 123;// }//// obj = new Person();console.log(obj)

包括Object.assign(target,src1,src2),仅仅把src对象身上的属性添加到target身上而已。可以使用assign来实现对象浅拷贝。

对象的遍历:http://es6.ruanyifeng.com/#docs/object#属性的可枚举性和遍历

对于 ES6 的class ,方法直接定义在原型上

class Point { ?toString() { ???// ... ?}}// 等同于Point.prototype = { ?toString() {},};typeof Point // "function"

克隆

首先复制原型,后复制对象身上的属性。

function clone(origin) { ?let originProto = Object.getPrototypeOf(origin); ?return Object.assign(Object.create(originProto), origin);}

ps:

Object.create(target)   的作用实际上以target为原型(__proto__),创建并返回一个空对象。

继承

  ES5中需要手动修改原型链来实现继承

  ES6中使用extend语法实现继承,本质是首先生成一个父类的对象(在子类的构造函数中必须显式或隐式调用了父类的构造函数),然后以这个父类的对象为原型(__proto__),创建子类对象。

通过class new出来的对象的constructor指向class,在ES5也是类似,通过函数new出来的对象的constructor指向函数

  

js 对象细节

原文地址:http://www.cnblogs.com/hellohello/p/7920414.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved