对象语法增强 已经有了个对象的新增语法 还需要一个api来做呢?. 因为有的时候,你需要在旧的对象上添加get.set. 读的时候就走get 写的时候就走set 假设很早之前在项目里写了一个old对象,它的属性都是写好的,现在想给oldObject加get.set.没有办法再去重新定义它 这个api是给已经定好的对象,来不及再去重新定义的对象修改属性, 这样就可以设置oldObject的值为1. 但是set方法里面什么也没做.所以输出oldObject.x的值为undefined 这个api还有…
对象属性的加强: 可以通过new Object(), Object.create()方法,或者使用字面量标记(初始化标记)初始化对象. 一个对象初始化器,由花括号/大括号 ({}) 包含的一个由零个或多个对象属性名和其关联值组成的一个逗号分隔的列表构成. 上面那句话说的是如何产生一个新的对象. 下面代码.a就是一个空对象, 空对象只有一个属性.那就是_proto_ 使用object.create去创建对象,需要传个参数,这里传null.就真的是一个空对象了,里面什么都没有 Object.crea…
重新审视了一下OC在属性修饰符,特意记录一下来.以后不定时更新 > retain:只有在非ARC下才会有效,所有如果在ARC下使用了retain修饰也白搭 如以下的data属性用retain修饰: #import <UIKit/UIKit.h> @interface MyView : UIView @property(nonatomic, retain) NSMUtableArray* data; @end 在对应的setter方法中,会以如下代码实现: if (_data != new…
时不时会有点迷惑属性修饰符retain.strong.copy三者之间的区别,还是把测试过程记录下来好一点! 1.属性修饰符结论 2.给retain.strong.copy修饰的字符串属性赋值指针变化测试例子 3.字符串调用copy.mutableCopy方法给字符串赋值指针变化例子 一.属性修饰符retain.strong.copy修饰字符串测试 先看代码,创建一个Person类,定义属性 #import <Foundation/Foundation.h> @interface Person…
MVC5中Model层开发数据注解   ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证(在服务器端和客户端验证数据的有效性) 数据显示(在View层显示相应的数据) 数据注解相关的命名空间如下: System.ComponentModel.DataAnnotations System.ComponentModel.DataAnnotations.Schema System.Web.Mv…
class(类) 1.internal 表示类只能在当然程序集中访问,类默认修饰符 2.public 表示所有地方都可以访问,与internal是互斥的 3.abstract 抽象类,不能被实例化,只能继承 4.sealed 密封类,不能被继承,与astract是互斥的 interface(接口) 1.public 表示所有的地方都可以访问,接口默认修饰符 2.internal 表只能在当然程序集只访问 注:接口不能用abstract与sealed,这对接口来说,没有意义 类的成员(字段,方法,…
1.BlueprintAssignable  暴露该属性来在蓝图中进行赋值,用于绑定多播委托 2.BlueprintCallable  用于从蓝图中调用C++原生函数 3.BlueprintReadOnly 蓝图读取,但不能修改且与BlueprintReadWrite不兼容. 4.BlueprintReadWrite 蓝图读取和写入 5.EditAnywhere  可以在编辑器内的属性窗口编辑,在原型和实例中都能编辑 6.EditDefaultsOnly  通过属性窗口来编辑,但仅能对原型编辑.…
匿名对象 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. //创建一个普通对象 Person p = new Person(); //创建一个匿名对象 new Person(); //创建匿名对象直接使用,没有变量名. new Person().eat() //eat方法被一个没有名字的Person对象调用了. //匿名对象在没有指定其引用变量时,只能使用一次. new Person().eat(); 创建一个匿名对象,调用eat方法 new Person().e…
ES6新出的关键class BE受雇与网景开发了JS 当我们在写一个对象的时候,我们实际上内存的形式表示. obj等于一个空对象,可以直接toString.它为什么可以有toString window是一个全局的对象. window下有个object的属性. 通过window.Object.prototype找到了toString 为了方便理解,当说原型的时候 先理解为共用属性. toString是很多对象的共用属性. 当谢var obj为一个空对象的时候,为什么可以获取到toString的方法…
回顾 当你声明一个空的对象obj的时候,会生成一块内存这个内存里面什么都没有,自由__proto__存在401的地址. 也就是Object的protototype在内存中的地址 类 通过函数创建类.这就是构造函数的由来. 用函数来创建某一类的对象,这个函数就叫做构造函数. 公有属性和私有属性 class constructor用来构造自有属性. 公有属性     p1的walk和p2的walk是同一个walk 复杂语法 类必须用new去创建. this就是p1这个对象 extends psers…
声明对象原型,公有属性. obj对象,它用一个属性__proto__记录了自己的原型 改掉它的原型为公有属性.那么obj这个对象及有了hi的方法.因为obj自己没有hi.那么就去自己的原型上去找了. obj.hi等价于公有属性.hi.call(obj). obj作为参数传递了过去. obj把自己传给hi.原型里面必须通过this去拿到.this是隐藏的真正的第一参数. oobj对应的this,yyy对应的第二个参数a 用简单的方式 修改了原型,原型上的hi方法输出hi 使用原型来模拟类 同一类对…
ES3里面的写法 匿名函数是用不了的 还是需要给他赋值 选中的这一部分叫做匿名函数 等于号叫做赋值 let xxx叫做声明 所以说这个地方是三个语法,首先声明一个匿名函数,然后声明一个xxx变量,最后把这个匿名函数赋值给这个变量xxx es6箭头函数 箭头函数只能做赋值,不能做声明 这是一个标准的箭头函数 写法2,只有一个参数 如果只有一个函数,可以不用写括号 调用一下做测试 写法3,函数体只有一句话的情况 如果函数体只有一句话,那么是可以不写花括号的. 假设我们的函数体只有return p1+…
执行顺序问题 请问console.log输出的值是多少 输出的肯定是1 假如这里有一行未知的代码 会打印出几? 如果这段未知的代码是a=2.那么其实console输出的就是2 只关心代码,没有关心代码执行的顺序,这就是这条面试题最大的陷阱. 最终输出的是 语法问题 i虽然是写在for循环里面,但是它依然是往外跑的 i等于5的时候要执行i++然后进入不到循环里面了.所以当等于6的时候循环内就不成立, 就执行最下面的console的输出 如果这行代码是用户点击的时候去执行的话.那么这行代码就是 最终…
解答提问 两边都没有构造函数的情况 父类没有构造函数,子类有构造函数的情况 下面用到的了this.body这个属性,所以super()必须要放在这行代码的上面. 在调用this之前必须调用super() 公有属性如果是一个数字,用原型可以,class不行 在原型上加人类的属性 在原型上加上了. 通过class的函数返回字符串来达到想要的效果 get和set 前面加get 调用的时候就可以不用加括号了 p1的race实际上是一个函数. 刚开始写错了,后期想去修正,没法修改.因为你始终是在调用这个函…
杂谈coffeescript 箭头函数抄的是谁? coffeescript 双箭头的形式 箭头函数简洁的语法 数组内每一个值都平方一下 Map的写法 箭头函数的写法 平方后,每一个值再加1 number变量改成用n,更简化 瘦箭头 瘦箭头其实就是function 判断response里面的对象是否存在的情况 coffescript里面的解决方法,直接用问号解决了. vue中说不要使用箭头函数? 因为vue中依赖this 用到了箭头函数就别用this function()简写的写法,onClick…
以前的var方式声明不好用 a=1回声明一个全局变量, 输出了1 说明a=1确实声明了一个全局变量. 但是你把放在其他的地方,就不是声明全局变量了. 如果外面有个全局变量a 那么函数里面就是给a赋值 有两层函数的时候,直接使用的是局部变量a,也就是fn函数里面的a 如果当前没有a就声明一个全局变量a.如果有a就利用这个a.下面当前就是有a的 这样用的就是最外面的var a 如果外面也没有,这时候才会去声明一个全局变量 所以a=1会声明一个全局变量是错的,只有在没有a这个变量的情况下才会隐式的去声…
es7语法比较少,只占了一点点 ES 6 新特性一览:https://frankfang.github.io/es-6-tutorials/ 我用了两个月的时间才理解 let   https://zhuanlan.zhihu.com/p/28140450…
在声明一个类的属性时,默认这个属性会被修饰atomic,意思是原子性访问的. nonatomic和atomic修饰的属性,在自己没有重写setter和getter的时候才会发生作用,其主要的作用可以理解为,atomic修饰的setter和getter在多线程下面是互斥的,相当于setter和getter中开始和结束的地方加锁了. stackoverflow上面对atomic解释赞同最多的答案: atomic不等于线程安全,对于常见的引用.指针.4字节(位宽字节)的变量,其赋值操作本身就是原子的…
readonly: 此标记说明属性是只读的,默认的标记是读写,如果你指定了只读,在@implementation中只需要一个读取器.或者如果你使用@synthesize关键字,也是有读取器方法被解析.而且如果你试图使用点操作符为属性赋值,你将得到一个编译错误. readwrite: 此标记说明属性会被当成读写的,这也是默认属性.设置器和读取器都需要在@implementation中实现.如果使用@synthesize关键字,读取器和设置器都会被解析. nonatomic: 非原子性访问,对属性赋…
H:\BaiDu\ES6深入浅出-wjw ES 6 新特性一览:https://frankfang.github.io/es-6-tutorials/ 我用了两个月的时间才理解 let https://zhuanlan.zhihu.com/p/28140450 1 新版变量声明:let 和 const 3 ES6深入浅出-1 新版变量声明:let 和 const-1.视频 概述 ES6深入浅出-1 新版变量声明:let 和 const-2.视频 let和const ES6深入浅出-1 新版变量声…
作为面对对象的核心内容,将从以下一个方面进行总结: 1. property和@property 2. __getattribute__().__getattr__().__setattr__().__delattr__() 3. 描述符__get__().__set__().__delete__() 4. 不可变对象的实现 1. property和@property 还是直接上代码来的方便 property()用法 #coding = utf-8 class property_test: def…
Java反射获取对象成员属性,getFields()与getDeclaredFields()方法的区别 ​ 在工作中遇到一个问题,就是你需要去判断某个字符串是不是对象的某个成员属性名,然后根据判断结果去操作这个成员属性. 想了下之后,我们可以根据Java反射中的getDeclaredFields()或者getFields()方法来实现我们的需求. ​ 首先说明一下getDeclaredFields()和getFields()这两个方法的区别: getFields(): 获取某个类的所有的publ…
ES6之前js的对象的属性只能是字符串, <html> <head> <script type="text/javascript"> var a = {1:2} for(let i in a ) { console.log(typeof i) } </script> </head> <body> </body> </html> 虽然在浏览器打印a的时候我们看到的1,但是这里打印i的type出…
LAZY 修饰符和 LAZY 方法 由 王巍 (@ONEVCAT) 发布于 2015/10/07 延时加载或者说延时初始化是很常用的优化方法,在构建和生成新的对象的时候,内存分配会在运行时耗费不少时间,如果有一些对象的属性和内容非常复杂的话,这个时间更是不可忽略.另外,有些情况下我们并不会立即用到一个对象的所有属性,而默认情况下初始化时,那些在特定环境下不被使用的存储属性,也一样要被初始化和赋值,也是一种浪费. 在其他语言 (包括 Objective-C) 中延时加载的情况是很常见的.我们在第一…
延时加载或者说延时初始化是很常用的优化方法,在构建和生成新的对象的时候,内存分配会在运行时耗费不少时间,如果有一些对象的属性和内容非常复杂的话,这个时间更是不可忽略.另外,有些情况下我们并不会立即用到一个对象的所有属性,而默认情况下初始化时,那些在特定环境下不被使用的存储属性,也一样要被初始化和赋值,也是一种浪费. 在其他语言 (包括 Objective-C) 中延时加载的情况是很常见的.我们在第一次访问某个属性时,判断这个属性背后的存储是否已经存在,如果存在则直接返回,如果不存在则说明是首次访…
为了方便大家写代码,vue.js给大家提供了很多方便的修饰符,比如我们经常用到的取消冒泡,阻止默认事件等等~ 目录 表单修饰符 事件修饰符 鼠标按键修饰符 键值修饰符 v-bind修饰符(实在不知道叫啥名字) 表单修饰符 填写表单,最常用的是什么?input!v-model~而我们的修饰符正是为了简化这些东西而存在的 .lazy <div> <input type="text" v-model="value"> <p>{{valu…
一.property 如果给一个属性同时提供了getter/setter方法, 那么我们称这个属性为可读可写属性 如果只提供了getter方法, 那么我们称这个属性为只读属性 如果只提供了setter方法, 那么我们称这个属性为只写属性 如果既没有提供getter也没有提供setter方法, 那么我们称这个属性为私有属性 格式: @property(属性修饰符) 数据类型 变量名称; @property(readwrite) int age; // 可读可写的 ,不用写的 默认就是这 /* -…
http://www.cocoachina.com/ios/20150106/10850.html 我们知道在Block使用中,Block内部能够读取外部局部变量的值.但我们需要改变这个变量的值时,我们需要给它附加上__block修饰符. __block另外一个比较多的使用场景是,为了避免某些情况下Block循环引用的问题,我们也可以给相应对象加上__block 修饰符. 为什么不使用__block就不能在Block内部修改外部的局部变量? 我们把以下代码通过 clang -rewrite-ob…
一.读写性修饰符:readwrite | readonly readwrite:表明这个属性是可读可写的,系统为我们创建这个属性的setter和getter方法. readonly:表明这个属性只能读不能写,系统只为我们创建一个getter方法,不会创建setter方法 二.setter相关修饰符:assign | retain | copy setter相关的修饰符表明setter方法应该如何实现 assign:表示直接赋值,用于基本数据类型(NSInteger和CGFloat)和C数据类型(…