导航

Object.defineProperty

Posted on 2017-12-19 22:04  小飞博客  阅读(363)  评论(0编辑  收藏  举报
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Object.defineProperty</title>
 6 </head>
 7 <body>
 8     <p>Object.defineProperty() 方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象。</p>
 9     <h4>语法:Object.defineProperty(obj, prop, descriptor)</h4>
10     <p><strong>参数</strong></p>
11     <p>
12 obj 需要定义属性的对象。<br>
13 prop 需被定义或修改的属性名。<br>
14 descriptor 需被定义或修改的属性的描述符。</p>
15 
16 <pre>
17     var person={};
18 
19     Object.defineProperty(person,'age',{value:27,writable:false});
20 
21     console.log(person.age);//27
22 
23     person.age=19; //设置不了writable:false  为true 则可以设置
24 
25     console.log(person.age);//27
26 </pre>
27 </body>
28 <script>
29     var person={};
30 
31     Object.defineProperty(person,'age',{value:27,writable:false});
32 
33     console.log(person.age);//27
34 
35     person.age=19; //设置不了writable:false  为true 则可以设置
36 
37     console.log(person.age);//27
38 
39 </script>
40 </html>
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>defineProperty-0</title>
 6 </head>
 7 <body>
 8     
 9 </body>
10 <script>
11 var pattern = {
12     get: function () {
13         return 'I alway return this string,whatever you have assigned';
14     },
15     set: function () {
16         this.myname = 'this is my name string';
17     }
18 };
19 
20 
21 function TestDefineSetAndGet() {
22     Object.defineProperty(this, 'myproperty', pattern);
23 }
24 
25 
26 var instance = new TestDefineSetAndGet();
27 instance.myproperty = 'test';
28 
29 // 'I alway return this string,whatever you have assigned'
30 console.log(instance.myproperty);
31 // 'this is my name string'
32 console.log(instance.myname);
33 </script>
34 </html>

 

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Vue 双向绑定实现原理</title>
 6 </head>
 7 <body>
 8 <div id="app">
 9     <input type="text" id="txt">
10     <p id="show-txt"></p>
11 </div>
12 <script>
13 /*
14 Object.defineProperty(obj, prop, descriptor)
15 obj ,待修改的对象
16 prop ,带修改的属性名称
17 descriptor ,待修改属性的相关描述
18 descriptor 要求传入一个对象,其默认值如下:
19 
20 {
21 configurable: false,
22 enumerable: false,
23 writable: false,
24 value: null,
25 set: undefined,
26 get: undefined
27 }
28 configurable ,属性是否可配置。可配置的含义包括:是否可以删除属性( delete ),是否可以修改属性的 writable 、 enumerable 、 configurable 属性。
29 enumerable ,属性是否可枚举。可枚举的含义包括:是否可以通过 for...in 遍历到,是否可以通过 Object.keys() 方法获取属性名称。
30 writable ,属性是否可重写。可重写的含义包括:是否可以对属性进行重新赋值。
31 value ,属性的默认值。
32 set ,属性的重写器(暂且这么叫)。一旦属性被重新赋值,此方法被自动调用。
33 get ,属性的读取器(暂且这么叫)。一旦属性被访问读取,此方法被自动调用
34 */
35 
36 
37 var obj = {}
38 
39 Object.defineProperty(obj, 'txt', {
40 
41     get: function () {//一旦属性被访问读取,此方法被自动调用
42 
43         return obj
44     },
45 
46     set: function (newValue) {//一旦属性被重新赋值,此方法被自动调用    同时将接收一个:属性被赋的新值 newValue
47 
48         document.getElementById('txt').value = newValue
49 
50         document.getElementById('show-txt').innerHTML = newValue
51     }
52 })
53 document.addEventListener('keyup', function (e) {
54     obj.txt = e.target.value
55 })
56 
57 </script>
58 </body>
59 </html>