浅谈Object.create

在网上发现了Object.create的用法,感觉很是奇怪,所以学习记录下

1 var o = Object.create(null);
2 console.log(o); // {}
3 o.name = ‘jian‘;
4 var o2 = Object.create(o);
5 console.log(o2); // {}
6 console.log(o2.name); // ‘jian‘, 

百度了一下原理:

1 Object.create =  function (o) {
2     var F = function () {};
3     F.prototype = o;
4     return new F();
5 };

再看一段代码:

1 var Base = function () {2 }
3 Base.prototype.a = 3;
4 var o1 = new Base();
5 var o2 = Object.create(Base);
6 console.log(o1.a);//3
7 console.log(o2.a);//undefined8 o2.__proto__.prototype.a//3

为什么呢:因为o2的原型链中并没有a这个属性但是根据之前代码Object.create的原理来看return new F();

那么假设这个o2=new F();因此可以推出o2.__proto__ = F.prototype=Base(此原理请参见之前文章面向对上中的图二),而Base.prototype.a = 3;

因此o2.__proto__.prototype.a=3

原文地址:https://www.cnblogs.com/ones/p/8453984.html

时间: 2024-10-07 09:59:57

浅谈Object.create的相关文章

浅谈 Object.observe

国际惯例:转载或引用时请注明原文出处. 今天看到了  Object.observe 这个方面,感觉不错,这里就来简单介绍下. Object.observe 这个方法 可以监听到 某个 对象的属性改变情况.使用方法如下 Object.observe(user,function(changes){    //code console.log(changes); });当  user 的属性发生变化,update,delete,add 时,都会触发该函数.注意 :只有user该对象的属性变化才会触发函

浅谈Object.assign()

Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象.返回值为目标对象. const obj = { name: "zs", age: 18, sex: "man" }; const newObj = Object.assign({ newname: "lisi" }, obj); console.log(newObj, obj); // { newname: 'lisi', name: 'zs', age:

JavaScript中toStirng()与Object.prototype.toString.call()方法浅谈

toStirng()与Object.prototype.toString.call()方法浅谈 一.toString()是一个怎样的方法?它是能将某一个值转化为字符串的方法.然而它是如何将一个值从一种类型转化为字符串类型的呢? 通过下面几个例子,我们便能获得答案: 1.将boolean类型的值转化为string类型: console.log(true.toString());//"true" console.log(false.toString());//"false&quo

Qt浅谈之十六:TCP和UDP(之一)

一.简介 Qt使用QtNetwork模块来进行网络编程,提供了一层统一的套接字抽象用于编写不同层次的网络程序,避免了应用套接字进行网络编的繁琐(因有时需引用底层操作系统的相关数据结构).有较底层次的类如QTcpSocket.QTcpServer和QUdpSocket等来表示低层的网络概念:还有高层次的类如QNetworkRequest.QNetworkReply和QNetworkAccessManager使用相同的协议来执行网络操作:也提供了QNetworkConfiguration.QNetw

浅谈对Java中ThreadLocal类的理解

首先要明确:ThreadLocal不是一个多线程类,或者应该叫做线程局部变量.这从ThreadLocal的JDK定义中就可以看到 public class ThreadLocal<T>extends Object 可以看出ThreadLocal只是一个普普通通的类,并没有继承自Thread或实现Runnable接口. 同时也可以看到ThreadLocal使用了泛型,这样他就可以操作几乎任何类型的数据了.下面说JDK API代码时具体再说. 对此类,看看JDK API中的部分描述: 该类提供了线

浅谈Kotlin(三):类

浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型.基本语法.代码风格 前言: 已经学习了前两篇文章,对Kotlin有了一个基本的认识,往后的文章开始深入介绍Kotlin的实战使用. 本篇介绍Kotlin中类的使用. 一.表现形式 首先看一段Java中定义类的形式,定义三个属性,每一个属性对应一个get.set方法,有一个toString()方法 /* * @author xqx * @emil [email protected] * create

浅谈JS的继承

JS继承 继承是OO语言中最为人津津乐道的概念,许多OO语言都支持两种方式的继承:接口继承:实现继承. 接口继承:只继承方法签名. 实现继承:继承实际的方法. 由于ES里函数没有签名,所以在ES里面无法实现接口继承,ES只支持实现继承.                                                                                                                                    

浅谈OCR之Onenote 2010

原文:浅谈OCR之Onenote 2010 上一次我们讨论了Tesseract OCR引擎的用法,作为一款老牌的OCR引擎,目前已经开源,最新版本3.0中更是加入了中文OCR功能,再加上Google的更新.维护,可以说是潜力很大,值得期待.由上一次的测试结果也可以看出,Tesseract的OCR结果还不是很理想,尤其是中英文混合的文字,其识别率有限.本次我们来关注下Office 2010中的Onenote,调用其API来测试OCR功能. PS:在公司经理一直推荐使用MyBase来记录工作中遇到的

sql之浅谈视图的作用

[数据库]☆★sql之浅谈视图的作用 在一个项目的实际开发过程中牵涉到复杂业务的时候,我们不可避免的需要使用中间表来进行数据连接,有的同学就说了,我可以采用Hibernate进行主外键进行关联啊?多对多,多对一,一对一,等,采用主外键关联在数据的操作过程中具有很强的耦合性,尤其对于需要经常删改数据表而言,我们是不建议采用主外键关联这种模式,那么,如果我们采用中间表的话,当数据过大在性能上又面临严峻考验,sql视图的出现,在解决中间表的业务逻辑上是不错的选择.ok,首先我们了解什么是视图? 1.视