object

前端的几种手写代码实现

孤街醉人 提交于 2020-02-15 15:44:47
前言 现在的前端门槛越来越高,不再是只会写写页面那么简单。模块化、自动化、跨端开发等逐渐成为要求,但是这些都需要建立在我们牢固的基础之上。不管框架和模式怎么变,把基础原理打牢才能快速适应市场的变化。下面介绍一些常用的源码实现: call实现 bind实现 new实现 instanceof实现 Object.create实现 深拷贝实现 发布订阅模式 call call 用于改变函数 this 指向,并执行函数 一般情况,谁调用函数,函数的 this 就指向谁。利用这一特点,将函数作为对象的属性,由对象进行调用,即可改变函数 this 指向,这种被称为隐式绑定。 apply 实现同理,只需改变入参形式。 let obj = { name: 'JoJo' } function foo(){ console.log(this.name) } obj.fn = foo obj.fn() // log: JOJO 实现 Function.prototype.mycall = function () { if(typeof this !== 'function'){ throw 'caller must be a function' } let othis = arguments[0] || window othis._fn = this let arg = [...arguments]

学习笔记----测试Tensorflow object detection API

戏子无情 提交于 2020-02-15 10:21:06
TensorFlow 安装测试无误,下载Tensorflow object detection API在cmd中运行 python object_detection/builders/model_builder_test.py 报错1 ModuleNotFoundError: No module named ‘absl’, 下载absl-py-0.1.10.tar.gz,通过cmd安装,问题解决,重新测试 报错2 No module named ‘object_detection’ 在 Tensorflow安装目录下,新建一个.txt文件,内容为两条路径models-master\research\slim 和 models-master\research (models-master是Tensorflow object detection API下载解压出来的文件夹),然后把后缀名改为.pth,问题解决,重新测试 报错3 module ‘tensorflow.python.keras’ has no attribute ‘Model’ 将tensorflow版本由1.4 更新到1.5 , 问题解决,重新测试 报错4 module ‘tensorflow.python.util.compat’ has no attribute ‘v1’ 来源: CSDN 作者: zhllove

JS---原型链

放肆的年华 提交于 2020-02-15 10:15:37
1.prototype和contructor prototype指向函数的原型对象,这是一个显式原型属性,只有函数才拥有该属性。contructor指向原型对象的构造函数。 关系如下图: 2. _ _ proto _ _ 每个对象都有__proto__,它是隐式原型属性,指向了创建该对象的构造函数原型。由于js中是没有类的概念,而为了实现继承,通过 proto 将对象和原型联系起来组成原型链,就可以让对象访问到不属于自己的属性。 函数和对象的关系如下图: 注意:Foo、Function和Object都是函数,它们的_proto_都指向Function.prototype。 3.原型对象之间的关系 如图: 原型对象的_proto_都指向了Object.prototype。js原型链最终指向的是Object原型对象 4.原型链 如图: 从第一个图到最后一个图我把它们拆分开理解,避免线条太对,混淆了,最后我自己总结了一下如下: (1).Function 和 Object 是两个函数。 (2).__ proto __ 属性将对象和原型连接起来组成了原型链。 (3).所有的函数的 __ proto __ 都指向Function原型对象。 (4) .js的原型链最终指向的是Object原型对象(Object.prototype),如上图所示: 来源: CSDN 作者: 背地里装个英雄 链接:

Javascript appending object doesn't guarantee order

随声附和 提交于 2020-02-15 06:09:28
问题 I have looked at this question in stack overflow about objects guaranteeing order. Does JavaScript Guarantee Object Property Order? some says they guarantee, some says they don't, depending on situations. Meantime I've encountered following problem. I have an array of objects, similar to below: const arrayObject = [ {id:'a123', bar:'hello'}, {id:'a321', bar: 'foo'} ]; now I wish to turn this arrayObject into object of object, with structure as follows with the same order as the array: const

23种设计模式(5):原型模式

China☆狼群 提交于 2020-02-15 03:43:34
定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 类型:创建类模式。 类图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件: 实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。 重写Object类中的clone方法。Java中,所有类的父类都是Object类,Object类中有一个clone方法,作用是返回对象的一个拷贝,但是其作用域protected类型的,一般的类无法调用,因此,Prototype类需要将clone方法的作用域修改为public类型。 原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式。在实际应用中,原型模式很少单独出现。经常与其他模式混用,他的原型类Prototype也常用抽象类来替代。 实现代码: class Prototype implements Cloneable { public Prototype clone(){ Prototype prototype = null; try{

java基础知识——反射

…衆ロ難τιáo~ 提交于 2020-02-15 02:14:16
反射原理 除了int,float等基本类型外,Java的其他类型全部都是class(包括interface),即class的本质是数据类型(Type) 。而class是由JVM在执行过程中动态加载的。JVM在第一次读取到一种class类型时(也是第一次要使用时才读取),将其加载进内存。每加载一种class,JVM就为其创建一个Class类型的实例(例如:Object 类中的 getClass( ) 方法就将返回一个 Class 类型的实例),并关联起来。注意: 这里的Class类型是一个名叫Class的class 。源码如下: public final class Class { private Class() {} } 以String类为例,当JVM加载String类时,它首先读取String.class文件到内存,然后,为String类创建一个Class实例并与之关联起来: Class cls = new Class(String); 这个Class实例是JVM内部创建的,我们自己的Java程序是无法创建Class实例的,因为Class类的构造方法是private,所以, JVM持有的每个Class实例都指向一个数据类型(类或interface) : 并且,一个Class实例包含了该class的所有完整信息: 由于JVM为每个加载的class创建了对应的Class实例

java 多线程的状态迁移 常用线程方法分析

北城以北 提交于 2020-02-14 23:43:52
一、线程的各个状态   图中的线程状态(Thread.Stat 中定义的Enum 名)NEW、RUNNABLE 、TERMINATED、WAITING、TIMED_WAITING 和BLOCKED 都能够通过Thread 类的getState 方法获取。 由图中可以看到: 1、 sleep 方法 只有timed_waiting ,是Thread的静态方法,可以通过 Thread类名调用 ,也可以 用线程对象调用 ,执行 sleep方法不释放锁 ,只 让出CPU等待 ,是给其他线程执行机会的最佳选择; 2、wait方法notify、notifyAll方法只能在加锁的代码 synchronized(obj) 中使用,用被锁住的资源 Object.wait() 调用,wait()之后, 释放对象锁 ,进入 等待队列 ,被其他程序notify或者超时之后进入 同步队列, 去争夺锁。 3、 I/O操作类似sleep,是不会释放锁 。 4、在线程thread2中调用thread1.join()方法,则thread2线程会等待thread1线程执行完毕后才会继续执行,等待过程不会释放锁。(可参考下文代码) 5、obj.notify()唤醒在 此对象等待队列 上等待的单个线程,选择是任意性的。notifyAll()唤醒在此对象等待队列上等待的所有线程 6、Thread.yield()

C#通过反射调用DLL内部函数

青春壹個敷衍的年華 提交于 2020-02-14 17:47:10
通过反射的方法调用外部DLL文件的函数(要事先知道DLL内的结构:命名空间、函数名称、函数参数类型等) // 依赖 using System . Reflection ; 代码 //加载Dll文件 Assembly assembly = Assembly . LoadFile ( @"dll的路径" ) ; //获取类型,参数(命名空间.类名) Type type = assembly . GetType ( "namespace.ClassName" ) ; //创建该对象的实例,object类型,参数(命名空间.类) object instance = assembly . CreateInstance ( "namespace.ClassName" ) ; //设置要调用方法中的参数类型,Type[]类型,如果有多个参数课追加 //假设要调用的方法只有一个String类型的参数 Type [ ] paramsType = new Type [ 1 ] ; paramsType [ 0 ] = Type . GetType ( "System.String" ) ; //设置要调用方法方法中的参数值,同上可追加 Object [ ] paramsObj = new Object [ 1 ] ; paramsObj [ 0 ] = "参数值" ; //执行ShowPara方法

设计模式之代理模式

…衆ロ難τιáo~ 提交于 2020-02-14 17:44:03
代理模式 基本介绍 代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理 对象访问目标对象.这样做的好处是: 可以在目标对象实现的基础上,增强额外的 功能操作,即 扩展目标对象的功能 。 被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象 代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK代理、接口代 理)和 Cglib代理 (可 1.静态代理 静态代码模式的基本介绍 静态代理在使用时,需要定义 接口或者父类 ,被代理对象(即目标对象)与代理对象一 起实现相同的接口或者是继承相同父类 应用实例  具体要求 定义一个接口:ITeacherDao 目标对象TeacherDAO实现接口ITeacherDAO 使用静态代理方式,就需要在代理对象TeacherDAOProxy中也实现ITeacherDAO 调用的时候通过调用代理对象的方法来调用目标对象. 特别提醒:代理对象与目标对象要实现相同的接口,然后通过调用相同的方法来 调用目标对象的方法。 代码编写: 定义一个接口:ITeacherDao /** * @author 孙一鸣 on 2020/2/13 */ public interface ITeacherDao { void teach ( ) ; } 目标对象TeacherDAO实现接口ITeacherDAO /** * @author

random模块用法

假装没事ソ 提交于 2020-02-14 11:07:19
random模块 导入模块:import random 随机小数:random.random() 0-1之内的随机小数,每个小数取到的概率是相同的 计算机不能表示无限不循环小数,无限循环小数包含在float中 随机整数: random.randint(1,4),顾头顾尾,包含1和4的随机整数。 random.randrange(1,2),顾头不顾尾,不包含2的随机整数。 random.randrange(1,10,2),顾头不顾尾,设置步伐为2 只有randrange()才可以设置步伐 随机抽取: random.choice(object),object是被抽取的对象,choice每次只能被随机抽取对象中的一个值 random.sample(object, count),object被抽取对象,count一次抽取几个值。 需要注意的是: 打乱顺序: random.shuffle(object),在原对象的基础上做乱序处理。必须是可以迭代的对象才能使用乱序。 来源: https://www.cnblogs.com/ddzc/p/12306354.html