zoukankan      html  css  js  c++  java
  • javascript中的面向对象—— 学习1

    面向对象:Object Oriented(OO)

      一切事物皆对象,通过面向对象的方式,将显示世界的事物抽象成对象,将显示世界中的关系抽象成类、继承,帮助人们实现对显示世界的抽象与数字建模;——百科

    一、基础知识点:

    1、面对对象的语言都有一个标志就是都有类的概念,可以通过类创建多个具有相同属性和方法的对象;

    2、ECMA-262中没有类的概念

    3、ECMA-262中定义为:“无序属性的集合,其属性可以包含基本的属性值、对象或者函数”

    4、理解对象:创建对象

    //创建对象最简单的方式就是创建一个Object对象,再对其添加属性和方法(早期使用此方法)
    var person = new Object()
    person.name="Nicholas";
    person.age= 56;
    person.job="Software Engineer";
     person.SayHai=function (){
    	 alert(person.name)
     }
     
     
     //以对象字面量的形式创建对象(达到的目的是一样的)
     var person={
    	 name="Nicholas";
    	 age=34;
    	 job="Software Engineer";
    	 SayHai:function{
    		 alert(person.name);
    	 }
    	 Ask:function{
    		 alert("Hello World");		 
    	 }
     }//注意此方法中是如何创建对象方法的
    

      

    二、属性类型

    1、数据属性

    //默认都为true 
     [[Configurable]]//表示能否通过delete删除属性从而重新定义属性、能否修改属性特性、或能否把属性改为访问器属性
     [[Enumerable]]//能否通过for-in循环返回属性
     [[Writable]]	//能否修改属性的值
     [[Value]]		//包含这个属性的数据值
     
    

      要修改属性默认的特性,必须用ECMAScript5的Object.defineProperty()方法

     var person ={}
          Object.defineProperty(person,"name",{
            Writable:false,
            Value:"Nicholas"
    });
    

      注:以上writable:false; 就是配置name属性不可修改   在严格模式下修改回报错

    var person={}
    	Object.defineProperty(person,"name",{
    		Configurable:false,
    		Value:"Nicholas";
    	});
    	delete person.name;
    	alert(person.name);//Nicholas
    

      注:以上Configurable:false; 所以delete删除  person.name在非严格模式下不起作用,在严格模式下回报错;

    ☆☆☆☆☆  可以多次Object.defineProperty()方法修改同一个属性,但在configurable特性设置了false之后在调用、修改就会有限制了(报错)

    2、访问器属性

    三、定义多个属性

    //定义多个属性
    
    var book={};
    Object.defineProperties(book,{
    	_year:{
    		Writable:true,
    		Value:2004
    	},
    	
    	edition:{
    		Writable:true,
    		Value:1
    	},
    	
    	year:{
    		get:function(){
    			return this._year;
    		},
    		
    		set:function(){
    			if(newValue > 2004){
    				this._yeay=newValue;
    				this.edition+=newValue - 2004
    			}
    		}
    	}
    });

      

    四、读取属性的特性;

    Object.getOwnPropertyDescriptor()  // 方法
    

      

  • 相关阅读:
    asp.net ajax传递Json给aspx.cs后台 webmethod方法传递json
    新手 Redis 配置笔记(windows),附下载地址
    在 LINQ to Entities 查询中无法构造实体或复杂类型
    WebApi 4.0 默认方式不支持HttpGet 请求
    jQuery .Ajax Error Handling Function
    My97DatePicker 与 某个CSS冲突 ,导致无法显示
    基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系
    使用Autofac部署IIS6.0时未能加载文件或程序集“System.Core, Version=2.0.5.0...“
    Could not load file or assembly 'System.Core, Version=2.0.5.0 和autofac冲突的问题
    线程间操作无效: 从不是创建控件“textBox2”的线程访问它
  • 原文地址:https://www.cnblogs.com/zhuyucun/p/6181115.html
Copyright © 2011-2022 走看看