target

Proxy代理

一笑奈何 提交于 2020-04-06 05:01:46
Proxy对象 在一个系统中,总要存储一些数据,对于这些数据,可能有一些是希望我们访问的,但是总有一些是中重要的,不希望我们访问的,希望保护起来,因此ES6新增了代理,在目标对象前架设个“拦截“层,外界对该对象的访问必须通过这层拦截,我们可以对外界的访问进行过滤和改写。 注意:Proxy修改了某些操作的默认行为,等同于在语言层做出修改,所以也属于”元编程“,即对语言进行编程。 语法: let proxy = new Proxy(target,handler) target 表示被代理的对象 handler 表示操作被代理的对象 注意: [[]] 为引擎内部属性或方法,外部不能获取 let star = { name: '尼古拉斯赵四', girlFriend: '赵丽颖', age: 40 } // 代理对象 let proxy = new Proxy(star, { // 取值方法 get(target, key, receiver) { // 如果是重要的数据,不要访问 if (key === 'girlFriend') { throw new Error('不能访问girlFriend') } if (key === 'age') { return 0 } // target 代表 star, key 代表属性名称, receiver代表proxy,

用Ant构建脚本(2)

让人想犯罪 __ 提交于 2020-04-05 20:54:51
用Ant构建脚本(2) 二、用Ant写buildfile Ant的buildfile是用xml写的。每一个buildfile包含了一个项目和一个及一个以上的对象。对象包含了多个任务元素。buildfile的每一个任务元素能有一个id属性,能在之后通过值来引用。这个值是唯一的。 build.xml文件是区分大小写的。其使用关键是编写build.xml文件,build.xml文件有五个主要的标识,如下: 1、Project元素 定义项目的属性,该标识有三个可以选择的属性: Name项目的名称; Default默认执行的target对象; Basedir用于计算所有其它路径的基本路径(“.”表示当前路径)。该属性可以被basedir property覆盖,当覆盖时,该属性会被忽略。 示例: <project name="examples" default="all" basedir="."> 2、Target元素 定义Ant命令的编译对象。 如Ant converter的编译对象是<target name="converter"> Target标识的属性解释如下: Name,定义target的名字,供Ant命令使用; Depends,定义它所依赖的其它执行对象,多个时用“,”隔开,即依赖表; If,条件执行,执行target所需要设定的属性名,其property的值被设置后执行;

Reflect对象

我与影子孤独终老i 提交于 2020-04-05 18:39:35
Reflect对象 Reflect对象的出现主要有以下几点原因: 1. 将Object 对象上的属于语言内部的方法放到 Reflect 对象上,从 Reflect 上获得语言内部的方法 // let obj = { color: 'red' } // // Object.preventExtensions(obj); // Reflect.preventExtensions(obj); // obj.num = 100; // console.log(obj) 2 修改某些 Object 方法的返回结果,让其变得更合理。 // let obj = {}; // // 特性 // // Object.defineProperty(obj, 'color', { value: 'red', configurable: false }); // // console.log(Object.defineProperty(obj, 'color', { value: 'green', configurable: true })) // console.log(Reflect.defineProperty(obj, 'color', { value: 'green', configurable: true })) // console.log(1111) 3 让Object的操作都变成函数行为

001twoSum

泪湿孤枕 提交于 2020-04-05 14:56:04
刚开始无脑双重循环,虽然通过了,但是效率太低 看了题解后转用map,效率大幅提高 /** * @param {number[]} nums * @param {number} target * @return {number[]} */ var twoSum = function(nums, target) { let length = nums.length let mp = new Map() nums.forEach((d,i)=>{ mp.set(d,i) }) for(let i=0;i!=length;i++) { let j = mp.get(target-nums[i]) if(j!=undefined && i!=j) return [i,j] } }; 来源: https://www.cnblogs.com/selfdef/p/12635700.html

SpringBoot零基础入门指南2--在idea中用tomcat发布项目

会有一股神秘感。 提交于 2020-04-04 19:48:29
在idea中用tomcat发布项目 使用SpringBoot启动程序,虽然速度快,但是不易调试,因此在开发中还是使用tomcat进行程序发布 1、修改pom.xml文件 <packaging>jar</packaging> ——》<packaging>war</packaging> 并添加热部署依赖 <!--开发人员工具--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId>        <scope>runtime</scope> </dependency> 重新导入 另外还可以添加一些编译配置,以便控制编译的JDK版本,减少版本的兼容的问题,此处不是必须。 在<properties>内部添加 <plugin.mybatis.generator>1.3.1</plugin.mybatis.generator> <plugin.maven-compiler>3.1</plugin.maven-compiler> <plugin.maven-surefire>2.18.1</plugin.maven-surefire> <skipTests>true</skipTests> 在<plugins>内部添加 <plugin>

OpenGL纹理映射总结

纵然是瞬间 提交于 2020-04-04 19:19:27
1.纹理对象: 使用纹理对象来存储纹理数据的步骤: 1) 生成纹理对象名称 2) 将纹理对象绑定到纹理数据(包括图像数据数组和纹理属性), 即创建纹理对象. 3) 如果OpenGL实现高性能纹理工作集, 应检查是否有足够的空间来存储所有的纹理对象. 如没有足够空间, 应设置每个纹理对象的优先级, 以确保最常用的纹理留在工作集中 4) 绑定和重新绑定纹理对象, 以便可以将其中的纹理映射到物体上. 2.生成纹理对象名称: void glGenTextures(GLsizei n, GLint* textureNames); 功能: 通过数组textureNames返回n个未用的纹理对象名, 返回的名称不必是相邻的整数. GLboolean glIsTexture(GLint textureName); 功能: 如textureName是已被绑定的纹理对象名, 且没有被删除, 则返回GL_TRUE, 如textureName为0, 或非0, 但不是已有纹理对象的名称, 返回GL_FALSE。 注:若glGenTextures()返回, 但未使用glBindTextures()绑定, 仍返回GL_FALSE 3.创建和使用纹理对象: void glBindTexture(GLenum target, GLuint textureName); 功能: 完成下面几项工作. 1)

spring aop

拈花ヽ惹草 提交于 2020-04-04 11:11:26
本文引用自 http://www.cnblogs.com/ityouknow/p/5329550.html 什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。 AOP使用场景 AOP用来封装横切关注点,具体可以在下面的场景中使用: Authentication 权限 Caching 缓存 Context passing 内容传递 Error handling 错误处理 Lazy loading 懒加载 Debugging  调试 logging, tracing, profiling and monitoring 记录跟踪 优化 校准 Performance optimization 性能优化 Persistence  持久化 Resource pooling 资源池 Synchronization 同步 Transactions 事务 Spring AOP底层技术 Spring提供了两种方式来生成代理对象: JDKProxy和Cglib

Vue 怎么用 vm.$set() 解决对象新增属性不能响应的问题 ?

谁说我不能喝 提交于 2020-04-04 10:46:58
受现代 JavaScript 的限制 ,Vue 无法检测到对象属性的添加或删除。 由于 Vue 会在初始化实例时对属性执行 getter/setter 转化,所以属性必须在 data 对象上存在才能让 Vue 将它转换为响应式 的。 但是 Vue 提供了 Vue.set (object, propertyName, value) / vm.$set (object, propertyName, value) 来实现为对象添加响应式属性,那框架本身是如何实现的呢? 我们查看对应的 Vue 源码: vue/src/core/instance/index.js export function set (target: Array<any> | Object, key: any, val: any): any { // target 为数组 if (Array.isArray(target) && isValidArrayIndex(key)) { // 修改数组的长度, 避免索引>数组长度导致splcie()执行有误 target.length = Math.max(target.length, key) // 利用数组的splice变异方法触发响应式 target.splice(key, 1, val) return val } // key 已经存在,直接修改属性值 if (key

(五)CommandBuffer基本应用

↘锁芯ラ 提交于 2020-04-04 10:45:33
1.前言 CommandBuffer为渲染命令缓冲区,我们将一些列渲染指令添加到CommandBuffer中,在需要执行时通过Camera或者Graphics类进行执行,进而实现对渲染流程的控制。同时可以实时生成我们需要的临时效果。本文完整代码在最后。 2.基本方法 目前只介绍CommandBuffer最基本的几个方法。首先定义一个CommandBuffer的实例: cmdBuffer = new CommandBuffer() { name = "CameraCmdBuffer" }; 2.1 DrawRenderer 2.1.1 ToScreen 示例代码如下: public void DrawRenderer() { cmdBuffer.Clear(); cmdBuffer.DrawRenderer(cubeRenderer, cmdMat); } 入口参数cubeRenderer为一个立方体网格,cmdMat为一个unlit/texture的材质,相当于用cmdMat材质,对cubeRenderer的显示效果进行了重新生成。并将结果直接显示在屏幕上,位置为原cubeRenderer位置。 2.1.2 ToTarget 示例代码如下: public void DrawRendererToTarget() { cmdBuffer.Clear(); cmdBuffer

473. 火柴拼正方形

戏子无情 提交于 2020-04-03 21:45:42
1 class Solution 2 { 3 public: 4 bool makesquare(vector<int>& nums) 5 { 6 if(nums.size()<4) return false; 7 int sum=0; 8 for(int i=0;i<nums.size();i++) sum+=nums[i]; 9 if(sum%4 != 0) return false; 10 sort(nums.rbegin(),nums.rend());//最神奇的一个操作(rebgin,rend)反向迭代器 11 //排序的原因是为了使大的数字优先放 会减少排序次数 12 int bucket[4]={0}; 13 return generate(0,sum/4,nums,bucket); 14 } 15 bool generate(int i,int target,vector<int>& nums,int bucket[]) 16 { 17 if(i == nums.size()) return bucket[0] == target && bucket[1] == target && bucket[2] == target && bucket[3] == target; 18 19 for(int j = 0;j < 4;j ++) 20 { 21 /