摘要:现在有两个对象我们希望继承,因为和都是普通的对象,不是构造函数,所以这里无法依赖于构造函数的继承。那方法是创建一个以某个对象为蓝本而生成的对象简单粗暴地拷贝所有的属性
现在有两个对象:
Man = { sex: "male" } Student = { job: "student" }
我们希望student继承person,因为person和student都是普通的对象,不是构造函数,所以这里无法依赖于构造函数的继承。那方法是:
1: 创建一个以某个对象为蓝本而生成的对象
function object(parent){ var F = function(){}; F.prototype = parent; return new F(); } var maleStudent = object(Man); maleStudent.job = "student"; maleStudent.sex === "male";//true
2: 简单粗暴地拷贝所有的属性
function deepCopy(parent, child){ var child = child || {}; for (i in parent) { if(typeof parent[i] === "object"){ child[i] = parent[i].constructor === "Array"? []: {}; deepCopy(parent[i], child[i]); } else{ child[i] = parent[i] } } return child; } var parent = { color: ["red", "green"], name: { firstName: "hehe", lastName: "Ha" } } var child = deepCopy(parent); child.color;// ["red", "green"]
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/83518.html
摘要:因为我们用这个函数来构造对象,所以我们也把称作构造函数。所以通过定义构造函数,就相当于定义了一个类,通过关键字,即可生成一个实例化的对象。 一、序言 和其他面向对象的语言(如Java)不同,Javascript语言对类的实现和继承的实现没有标准的定义,而是将这些交给了程序员,让程序员更加灵活地(当然刚开始也更加头疼)去定义类,实现继承。(以下不讨论ES6中利用class、exten...
摘要:原文链接一什么是非构造函数的继承比如,现在有一个对象,叫做中国人。通过函数,继承了。中国北京上海香港厦门北京上海香港厦门北京上海香港这时,父对象就不会受到影响了。目前,库使用的就是这种继承方法。 原文链接 一、什么是非构造函数的继承? 比如,现在有一个对象,叫做中国人。 var Chinese = { nation: 中国 } 还有一个对象,叫做医生。 var Doctor = {...
摘要:这样肯定不行,给添加方法或影响到这种方式有一个缺点,在一个实例时会调用两次构造函数一次是,另一次是,浪费效率,且如果构造函数有副作用,重复调用可能造成不良后果。 写在前面 此文只涉及基于原型的继承,ES6之后基于Class的继承请参考相关文献。 知识储备 构造函数的两种调用方式(结果完全不同) 通过关键字new调用: function Person(name) { this.n...
摘要:防止类的构造函数以普通函数的方式调用。这个函数的主要作用是通过给类添加方法,其中将静态方法添加到构造函数上,将非静态的方法添加到构造函数的原型对象上。 Class是ES6中新加入的继承机制,实际是Javascript关于原型继承机制的语法糖,本质上是对原型继承的封装。本文将会讨论:1、ES6 class的实现细2、相关Object API盘点3、Javascript中的继承实现方案盘点...
阅读 2800·2021-10-08 10:12
阅读 3889·2021-09-22 15:45
阅读 2443·2019-08-30 15:52
阅读 2537·2019-08-29 18:44
阅读 2564·2019-08-29 12:37
阅读 1066·2019-08-26 13:36
阅读 2486·2019-08-26 13:34
阅读 1373·2019-08-26 12:20