javascript对象属性的赋值解析
来源:互联网 发布:用dos运行java 编辑:程序博客网 时间:2024/06/05 23:49
代码如下:
function Animal(){} function Dog (age){ this.name = 'fuck you' ; this.age = age } var dog = new Dog(12); console.log(dog); //{name: "fuck you", age: 12} Dog.prototype = Animal; var dog2 = new Dog(12); console.log(dog2);//{age: 12}
dog2对象的name属性不见了,why?
概念:
在segmentfault社区找到相关概念:
当为一个对象属性赋值是要遵循以下规则:
- 当对象的原型链中的原型对象上有对应的属性名,但是其是只读的,那么对象属性的赋值操作无效;
- 当对象的原型链中的原型对象上有对应的属性名,但是其是可写的,且设置了set方法,那么对象属性的赋值操作无效,转而调用调用原型对象中的属性的set方法;
- 当对象的原型链中的原型对象上有没有对应的属性名,那么直接在当前对象上添加这个属性(如果没有这个属性)并赋值。
解读:
Object.getOwnPropertyNames(Animal) //["length", "name", "arguments", "caller", "prototype"]//Animal有上述5个属性Object.getOwnPropertyDescriptor(Animal, 'name')//Object {value: "Animal", writable: false, enumerable: false, configurable: true}//属性'name'只读,所以再次赋值无效//通过知道属性只读,对象属性赋值操作无效,那么我们可以更改name的property-wirteable为true,如下Object.defineProperty(Animal, 'name', {writable: true})Object.getOwnPropertyDescriptor(Animal, 'name')//Object {value: "Animal", writable: true, enumerable: false, configurable: true}var dog3 = new Dog(13)//Dog {name: "fuck you", age: 13}//属性enumerable都为false,所以for in遍历不出来Object.keys(Animal) //[]//用ES6的ReflectReflect.ownKeys(Animal)//["length", "name", "arguments", "caller", "prototype"]Reflect.has(Animal,'name') //true
0 0
- javascript对象属性的赋值解析
- Javascript面试题:如何给一个Javascript的对象属性赋值?如何取得属性值?
- Javascript面试题:如何给一个Javascript的对象属性赋值?如何取得属性值?
- Javascript 创建对象及为对象属性赋值
- JavaScript 的对象属性
- JavaScript的对象属性
- javascript对象的属性
- JavaScript 对象的属性
- TComboBox的Items属性赋值解析
- Java 对象之间相同属性的赋值
- 对象的赋值,动态创建属性
- 创建javaScript自定义对象,并给属性赋值
- 对象复制与赋值的解析
- 对象作为属性赋值
- javascript中的对象赋值
- 解析js对象的属性
- 常用的JavaScript对象.属性
- javascript对象属性的访问
- First-欢迎来到IOS世界
- GitHub, Google Code, and other
- java web 监听器listener
- IOS 开发过程中的 消息通知 小红点
- PKI 1. 加密技术基本原理
- javascript对象属性的赋值解析
- memset(void *s,char ch unsigned n)函数解释
- duplicated with element declared at AndroidManifest.xml:11:9-20:20
- Beyond Compare文件夹比较规则
- 使用Redis之前5个必须了解的事情
- 理解Javascript中的变量作用域(scope)和语境(context)
- J2EE Servlet 学习笔记5
- poj2256人工智能?其实就是字符串处理啦
- decode函数