zoukankan      html  css  js  c++  java
  • 面向对象基础知识(一)

    面向对象基础(一)

    javaScript基础知识

    javaScript是一门编程语言。

    JavaScript的运行环境

    浏览器-》内核(渲染引擎:JS解析器V8)

    JavaScript 组成

    • ECMAScript(3.0主要版本),JavaScript的标准
    • DOM
    • BOM

    JavaScript中的数据类型?

    基本类型:number string boolean null undefined
    引用类型 : object (Array Math RegExp Function Object Error Number String Boolean XMLHttpRequest)

    基本类型和引用类型的差别

    • 存储方式不同:基本类型数据存储在栈stack,引用类型存储在堆heap
    • 传递参数不同,基本类型传值,复杂类型传递地址。

    异常处理

    一般将容易出错的代码放在try catch中

    var abc=123;
    try {
      //try当中的代码一旦发生错误,之后的代码就不再执行
      //可以用来验证后台数据的正确性,
      var data=false;
      if(!data){
        throw new Error('数据错误')
      }
      console.log(abc);
    }catch (e){
      //只有try部分发生了错误,该部分代码才会执行。
      //e.message表示错误的原因
      /e.name表示错误的类型
      console.log(e.message);
      console.log(e.name);
      if(e.name==='Error'){
        onload=function(){
          var info=document.getElementById("id");
          info.innerHTML = e.message;
        }
      }
    }finally {
      //无论try当中的代码是否发生错误,finally中的代码都会执行
      console.log('abc');
    }
    

    应用场景

    var xhr = new XMLHttpRequest();
    if(window.XMLHttpRequest){
      //标准浏览器
      xhr = new XMLHttpRequest;
    }else {
      //早起的IE浏览器
      xhr = new ActiveXObject('Microsoft.XMLHTTP')
    }
    
    //使用try  catch
    try {
      xhr = new XMLHttpRequest();
    }catch {
      xhr = new ActiveXObject('Microsoft.XMLHTTP');
    }
    
    

    对象(无序的键值对集合)

    所谓的对象就是某种具体的事物。

    //构造函数和实力对象距离
    //该部分是指构造函数。
    function Car(brand,color){
      this.brand=brand;
      this.color = color;
    }
    //该部分是构造函数。
    var car1=new Car('奔驰','red');
    
    

    对象属性的访问形式以及差别

    方括号的定义方式可以使用变量

    • 通过点的方式。如f.info
    • 通过方括号的方式。如f[info]
    function Foo(size,info){
      this.size = size ;
      this.info = info ;
    }
    var f = new Foo(small,curcle);
    //从访问以及添加属性方面,两种方式没有差别。
    console.log(f.info);
    console.log(f['info']);
    
    //从添加属性方面,两者也没有差别
    f.age = 12;
    f['attr'] = 'hello';
    
    //但,方括号可以使用变量的方式访问属性。
    var abc = 'info';
    console.log(f[abc]);
    

    对象创建方式

    • 通过构造函数
    • 字面量
    //字面量
    var obj = {
      username : 'juanjuan',
      age: '18',
      gender : 'female'
    }
    //构造函数
    //如果构造函数不需要传递参数,那么后面的括号可以省略。
    var obj = new Object();
    obj.usename = 'lili',
    obj.age = '88',
    obj.gender = 'male'
    

    构造函数实例对象本质上:

    • 开辟一块堆内存存储实例中的数据(属性和方法)
    • 用this指向该区域。
    • 通过this向该区域中放置数据。
    • 返回this。
    function Foo(info){
      //构造函数中的this指的是实例对象
      this.info = info;
      this.showInfo = function(){
        //实例方法中的this指的是实例对象本身
        console.log(this.info);
      }
      //构造函数的默认返回值是this。
      //如果返回的是基本数据类型,则无效。
      //如果返回的是引用类型,则产生效果。
    }
    

    原型

    实现数据共享(实例对象中数据共享)

    prototype__proto__

    A:函数都有一个原型属性prototype,该属性值本质上也是对象(实际上就是object的实例)
    原型的作用:实现数据共享(实例对象之间进行共享),实现继承。

    **B:prototype,构造函数产生的实例对象都有一个属性__prototype__,该属性不是标准属性,不可以在编程中使用,实际上该属性是浏览器内部使用的,与prototype指向相同。 **

    function Person(name,age){
      this.name = name;
      this.age = age;
    }
    person.prototype.showName = function(){
      console.log(this.name);
    }
    person.prototype.showAge = function(){
      console.log(this.age);
    }
    var p1 = new Person('tom',12);
    var p2 = new Person('jerrey',13);
    

    JavaScript 面向对象相关概念

    • 构造函数
    • 实例对象
    • 原型

    什么是面向对象

    面向对象是一种编程模式,就是以对象的方式写代码。

    //面向对象写法,点击按钮,改变div背景色
    <button id='btn'>点击改变</button>
    <div id='dv'></div>
    
    <script>
    function changeColor(btn,div){
          this.btn = document.getElementById(btn);
          this.div = document.getElementById(div);
    	}
    	changeColor.prototype.init = function(){
    	  var that = this;
    	  this.btn.onclick=function(){
            that.div.style.backgroundColor='red';
    	  }
    	}
    onload = function(){
    	var cc = new changeColor('btn','dv');
    	cc.init();
    }
    	
    </script>
    

    面向对象中this场景

    • 构造函数中的this:实例对象
    • 原型方法中的this:实例对象
      • 事件方法中的this:绑定时间的对象。

    数据类型判断typeof

    console.log(1,'a',true); ====>>>object
    console.log(null)===>>>object
    
    console.log(new Number(10))===>>>object
    
    console.log(function(){})====>>>function
    

    对象中属性的判断

    • in:判断对象中是否存在某个属性。属性在实例对象和原型对象上都可以
    • hasOwnProperty():判断对象中是否存在某个属性。属性只能是在实例对象上。
    //全局作用域中的变量和函数都是window对象的成员(预解析)
    //JS中没有块级作用域
    if('a' in window){
      var a = 123;
      console.llog(a);
    }
    
    function Foo(info){
      this.info = info;
    }
    Foo.prototype.flag = 123;
    var foo = new Foo('hello');
    
    console.log('flag' in foo);//true
    console.log('info' in foo);//true
    
    console.log(foo hasOwnProperty('info'));//true
    console.log(foo hasOwnProperty('flag'));//false
    

    实现一个方法,判断某个属性是否在原型上。

    function check(attr,obj){
      if(attr in obj && !obj hasOwnProperty(attr)){
       retrun true; 
      }else {
        return false;
      }
    }
    var ret = check('flag',foo);
    console.log(ret);
    

    面向对象和面向对象的区别

    A:面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用即可。

    B:面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

  • 相关阅读:
    轻松搞定Ajax(分享下自己封装ajax函数,其实Ajax使用很简单,难是难在你得到数据后来怎样去使用这些数据)
    模块化开发,SesJS简单总结
    轻松实现HTML5时钟(分享下自己对canvas的理解,原来没你想像的那么难哦)
    轻松搞定javascript预解析机制(搞定后,一切有关变态面试题都是浮云~~)
    javascript中可处理的浮点数的最高精度(和小数的一些小特性)
    PyLucene检索demo
    PyLucene索引DEMO
    Lucene类介绍
    PyLucene 的安装
    写一个程序,打印数字1到100,3的倍数打印“Fizz”来替换这个数,5的倍数打印“Buzz”,对于既是3的倍数又是5的倍数的数字打印“FizzBuzz”
  • 原文地址:https://www.cnblogs.com/wang-juan/p/6794976.html
Copyright © 2011-2022 走看看