zoukankan      html  css  js  c++  java
  • js 面向对象编程

    定义:

    无序属性值的集合,属性可以是基本值,对象或者是函数。(数组也可以看做是对象,下标是属性名)

    数据属性:

    configurable :表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性或者能否把属性修改为访问器属性。
    enumerable:表示能否通过for-in循环返回属性。
    writable:表示能否修改属性的值。
    value:包含这个属性的数据值。
    要修改属性默认的特性(前三个默认为true,最后一个默认为undefined,这也是为什么属性定义了而未初始化的时候是undefined的原因。)。必须使用Object.defineProperty()方法,这个方法接受三个参数,属性所在的对象、属性的名字和一个描述符对象(上面四个中的一个或者多个)

    访问器属性

    configurable,enumerable属性同上。
    get:在读取属性时调用的函数;
    set:在设置属性时候使用的方法。
    访问器属性不能直接定义,必须使用Object.defineProperty()来定义。

    判断属性位置

    通过in和hasOwnProperty()来确定属性是在原型中还是在对象中
    in是沿着原型链一直寻找属性,而hasOwnProperty()只在当前对象中寻找。

    三种遍历方式
    for-in,Object.keys(),Object.getOwnPropertyNames()

    防篡改对象

    不可扩展 Object.preventExtens(obj);可删除
    密封对象Object.seal(obj); 不可扩展,不可删除,已有成员的configurable置为false,但是可写;
    冻结对象:Object.freeze(obj),不可扩展,不可删除,不可写;成员的writable置为false。

    安全类型检测

    	function isArray(v){
    		return Object.prototype.toString.call(v) == '[object Array]'; //'[object RegExp]' '[object Function]'
    	}
    	alert(isArray([]));


    测试代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>无标题文档</title>
    </head>
    
    <body>
    <script type="text/javascript" language="javascript">
    	var person = {name:'wch'};
    	person.name = 'wwww';
    	Object.defineProperty(person,'name',{
    		writable:false
    	});
    	person.name = '123';
    	alert(JSON.stringify(Object.getOwnPropertyDescriptor(person,'name')));
    	Object.defineProperty(person,'name',{});
    	alert(JSON.stringify(Object.getOwnPropertyDescriptor(person,'name')));
    	
    	var book = {
    		_year:2005,
    		edition:1
    	};
    	Object.defineProperty(book,'year',{
    		get:function(){
    			return this._year;
    		},
    		set:function(newValue){
    			this._year = newValue;
    			this.edition ++;
    		}
    	});
    	book.year = 2009;
    	alert(book.edition);
    	
    	function Person(){
    		this.name = 'wch';
    	};
    	Person.prototype = {
    		name:'111',
    		age:100
    	};
    	var person = new Person();
    	alert(('age' in person) +' : '+ person.hasOwnProperty('age'));
    	for(var key in person){
    		alert(person[key]);
    	}
    	alert(Object.keys(person));
    	alert(Object.getOwnPropertyNames(person));
    
    
    	
    	var person = {name : 'wch'};
    	Object.preventExtensions(person);
    	person.age = 29;
    	alert(person.age);
    	alert(person.name);
    	delete person.name; //可删除
    	alert(person.name);
    	Object.seal(person);
    	delete person.name; //不可删
    	alert(person.name);
    	person.name = '11111'; //可以写
    	alert(person.name); 
    	Object.freeze(person);
    	delete person.name; //不可删
    	alert(person.name);
    	person.name = '11111'; //不可以写
    	alert(person.name); 
    </script>
    </body>
    
    </html>
    



  • 相关阅读:
    Pycharm激活
    初识HTML
    软件测试之性能测试应用领域
    剑指offer学习
    编译PC版本的C程序
    嵌入式Linux中Socket套接口开发
    win7安装ubuntu,如何设置win7为默认启动项
    struct v4l2_buffer
    dpkg命令查看 sudo apt-get install ~~ 安装的软件路径
    Missing table when do SQL data compare
  • 原文地址:https://www.cnblogs.com/vvch/p/4027578.html
Copyright © 2011-2022 走看看