JavaScript高级程序设计第六章面向对象程序设计

原创 Laughing  2018-01-15 23:58  阅读 610 次 评论 0 条

数据属性

[[configurable]]:表示能否通过delete删除属性从而重新定义属性
[[Enumerable]]:表示能够通过for-in循环数据
[[Writable]]:表示能够通过修改属性的值
[[Value]]:包含这个属性的数据值
  1. //"use strict"//严格模式应该写在函数开头位置  
  2.        var person = {  
  3.            name:'李森',  
  4.            age:27  
  5.        };  
  6.        Object.defineProperty(person,"name",{  
  7.            writable:false,//定义变量不可修改  
  8.            value:'lisen'//设置变量值  
  9.        });  
  10.        person.name='lisen1';//启用严格模式会报错,非严格模式会忽略修改  
  11.        console.log(person.name);  
  12.        Object.defineProperty(person,'name',{  
  13.            configurable:false  
  14.        });  
  15.        delete person.name;//删除属性  
  16.        console.log(person.name);//启用严格模式会报错,非严格模式会忽略更改  

访问属性

常见的包括getset属性

[[get]]:在获取属性时调用的函数
[[set]]:在设置属性时调用的函数
  1. var animal ={  
  2.           _name:"Tiger",  
  3.           _amount:10  
  4.       };  
  5.       Object.defineProperty(animal,"name",{  
  6.           get:function () { return this._name;},  
  7.           set:function (newValue) {  
  8.               this._amount+=1;  
  9.               this._name=newValue;  
  10.           }  
  11.       });  
  12.       console.log(animal.name);  
  13.       animal.name="Sheep";  
  14.       console.log("开始输出_amount");  
  15.       console.log(animal._amount);  
  16.       console.log("开始输出_name");  
  17.       console.log(animal._name);  

批量设置属性值

  1. var animal ={  
  2.             _name:"Tiger",  
  3.             _amount:10  
  4.         };  
  5.        Object.defineProperties(animal,{  
  6.            name:{  
  7.                get:function () {  
  8.                    return this._name;  
  9.                },  
  10.                set:function (newValue) {  
  11.                    this._name=newValue;  
  12.                }  
  13.            },  
  14.            amount:{  
  15.                value:200  
  16.            }  
  17.        });  
  18.        console.log(animal.amount);//200  

获取属性值

  1. var desc = Object.getOwnPropertyDescriptor(animal,"name");  
  2.       console.log(desc.value);  

构造函数

其实构造函数与其他函数没有什么本质的区别,任何函数通过new关键字都可以作为构造函数。

  1. function Person(name) {  
  2.          this.name=name;  
  3.          this.sayName=function () {  
  4.              alert(name);  
  5.          }  
  6.      }  
  7.      var person = new Person("123");  
  8.      person.sayName();  
  9.      console.log(person.name);  

通用做法

一般情况下,我们可以通过匿名函数进行创建

  1. var obj = obj || {};  
  2.   (function (o,$) {  
  3.       o.name = "lisen";  
  4.       $.obj = obj;  
  5.          })(obj,jQuery);  
  6.   alert(obj.name);  
  7.   alert($.obj.name);  
本文地址:https://www.lisen.me/the-sixth-chapter-of-javascript-advanced-program-design-object-oriented-programming.html
版权声明:本文为原创文章,版权归 木子网 所有,欢迎分享本文,转载请保留出处!

发表评论


表情