面向对象的三大特性:

  

  1. 封装

    a)  把一些属性和方法装到一个对象里

  2.  继承

    a)  js中的继承是指:

    1.      一个对象没有一些方法和属性,而另一个对象有
    2.   把另一个个对象的属性和方法,拿过来自己用,这就是继承

    b)  混入式继承  for … in

       1.       父类的属性和方法在所有之类

  3.  多态

    a)  JS中没有相应的体现

    b)  在强类型语言比较常见

    c)  实用父类的变量接受子类的对象

    d)  父类的属性方法供所有的子类共享

创建对象的方式

1. 创建对象

  四种方法:

    1、字面量创建

      用一个创建一个,不能复用。会造成代码亢余,资源浪费

    2、内置构造函数创建对象

      1、内置构造函数创建对象

        1. var p = new Object();

        2.var arr = new Array();

        3. 创建出来的对象都是空对象,要手动添加属性,造成代码重复

    3、 封装简单的工厂函数(不推荐)

        

  1. function creatObj(name, age){
  2. var obj = {
  3. boj : name;
  4. obj: age;
  5. sayHello : function(){
  6. console.log('');
  7. }
  8. }
  9. return obj;
  10. }

    4、 自定义构造函数

       

  1. function Porple(data1,data2){
  2. this.xx = data;
  3. }

构造函数是干什么用的?

在JavaScript中,构造函数是给对象添加属性,初始化属性用的。

对象的创建过程

  1. var p = new Person();

以上面这个p对象创建为例:

  1. 首先使用new关键字创建对象,类似于使用{},这个时候创建出来的对象是一个"没有任何成员"的对象。这里需要注意两点:

    • 使用new关键字创建的对象,对象的类型就是创建这个对象使用的构造函数的函数名
    • 使用{}创建对象,对象的类型一定是Object,相当于使用了new Object()
  2. 使用构造函数为其初始化成员

    • 在构造函数调用开始的时候,有一个赋值操作,也就是让this = 刚创建出来的对象
    • 在构造函数中,this就代表刚创建出来的对象
  3. 在构造函数中,利用对象的动态特性,为对象添加成员

自定义构造函数

function Porple(data1,data2){

this.xx = data;

}

  1. 概念:用来实例化对象,并且给初始化对象赋值
  2. 构造函数名首字母大写
  3. 构造函数一般和new关键字一起使用
  4. 构造函数返回值默认为新创建好的对象,如果手动设置返回值

a)  返回值类型如果不是Object类型的都还返回创建的对象

b)  如果是Object类型的就返回object

a)  对象字面量{},创建对象

b)  自定义构造函数,创建对象

  1. 构造函数也是函数,通常用来初始化对象
  2. new用来创建对象
  3. 构造函数用来初始化函数
  4. 构造函数名要大写,

c)  构造函数的执行过程

  1. 使用new关键字创建对象
  2. 调用构造函数把新创建出来的对象赋值给构造函数的this关键字
  3. 在构造函数内实用this为新创建出来的对象添加成员
  4. 默认返回新创建的这个对象
  5. 如果return一个空值,或者return一个基本类型数据仍旧是返回新创建的对象

a)  返回undefined和null都是返回新对象

  1. 如果return的是object类型,将返回return后面的对象
  2. 函数名加括号就是调用函数
  3. 不写括号是把函数整体代码赋值给另一个变量
  4. 如果调用函数的时候不给构造函数实参,构造函数不会创建新对象,里面的this将会指向window,添加的属性也会添加给window
  5. 如果构造函数没有参数,可以不写括号调用

对象成员:属性和方法

原型、

  • 每一个函数在定义的时候,都会有跟它关联的一个对象被创建出来
  • 每一个由构造函数创建出来的对象,都会默认的和构造函数的神秘对象关联
  • 当使用一个方法进行属性或者方法访问的时候,会先在当前对象内查找该属性和方法
  • 如果当前对象内未找到,就回去跟它关联的神秘对象内进行查找
  1. 访问构造函数的原型

    a)  构造函数.prototype

  2.  构造函数.prototype.新属性 = 属性值

  3.  自己和原型中都有的属性,优先用自己的

  3.  创建一个对象叫做实例化对象

    a)  通过构造函数创建对象创建对象的过程

  4.  实例

    a)  通过构造函数实例化出来的对象就是该构造函数的一个实例

  5.  原型的实用方法:

    a)  利用对象的动态特性给原型对象添加属性

  6.  直接替换原型对象

    Porple.prototype = {

         name : ‘Jack’,

    }

    a)  直接替换原型对象出现的问题

    1. 在替换原型之前创建的对象的原型  和在替换原型之后创建的对象的原型 不是同一个
    2. 替换不是修改

    b)  点语法进行属性赋值的时候,不会去原型查找

    c)  使用点语法赋值的时候,如果对象中不存在该属性,就会对该对象新增属性,不会去原型中查找

    d)  如果原型总分的属性是引用类型的属性,那么所有的对象共享该属性,并且一个对象修改了该引用

      类型中的成员,所有对象都会被修改

    e)  一般不会把属性放置到原型中

  7.  通过构造函数访问原型

    a)  构造函数.prototype

  8.  通过对象访问原型

    a)  对象.__proto__          //不推荐使用

  9.  constructor:原型对象的属性

JS高级. 02 面向对象、创建对象、构造函数、自定义构造函数、原型的更多相关文章

  1. JS高级---工厂模式创建对象和自定义构造函数创建对象的区别

    创建对象:工厂模式和自定义构造函数的区别 共同点: 都是函数, 都可以创建对象, 都可以传入参数   区别:   工厂模式: 函数名是小写 有new, 有返回值 new之后的对象是当前的对象 直接调用 ...

  2. JS高级---三种创建对象的方式

    JS高级---三种创建对象的方式 字面量的方式 (实例对象) 调用系统的构造函数 自定义构造函数方式 //创建对象---->实例化一个对象,的同时对属性进行初始化 var per=new Per ...

  3. JS高级:面向对象的构造函数

    1 创建对象的方式 1.1 字面量的方式创建对象 var p1 = { name: '张三', run: function () { console.log(this.name + '跑'); } } ...

  4. JS高级:面向对象解析

    1 实例属性/方法 都是绑定在使用构造函数创建出来的对象p上; 最终使用的时候也是使用对象p来进行访问; function Person(name, age, doFunc) { this.name ...

  5. JS高级---体会面向对象和面向过程的编程思想

    体会面向对象和面向过程的编程思想 ChangeStyle是自定义的构造函数,再通过原型添加方法的函数. 实例化对象,导入json参数,和创建cs,调用原型添加的方法函数 过渡,先熟悉记忆 <!D ...

  6. JS基础语法---创建对象---三种方式创建对象:调用系统的构造函数;自定义构造函数;字面量的方式

    创建对象三种方式: 调用系统的构造函数创建对象 自定义构造函数创建对象(结合第一种和需求通过工厂模式创建对象) 字面量的方式创建对象 第一种:调用系统的构造函数创建对象 //小苏举例子: //实例化对 ...

  7. 前端 ---JS中的面向对象

    JS中的面向对象   创建对象的几种常用方式 1.使用Object或对象字面量创建对象 2.工厂模式创建对象 3.构造函数模式创建对象 4.原型模式创建对象 1.使用Object或对象字面量创建对象 ...

  8. JS高级---复习

    复习 面向过程和面向对象都是编程的思想, 方式不一样 面向过程: 凡事都是亲力亲为, 所有的代码都要自己写, 每一步都要很清楚, 注重的是过程 面向对象: 执行者成为指挥者, 只要找对象, 然后让对象 ...

  9. js面向对象、创建对象的工厂模式、构造函数模式、原型链模式

    JS面向对象编程(转载) 什么是面向对象编程(OOP)?用对象的思想去写代码,就是面向对象编程. 面向对象编程的特点 抽象:抓住核心问题 封装:只能通过对象来访问方法 继承:从已有对象上继承出新的对象 ...

随机推荐

  1. 【阿里云产品公测】服务器测性能,PTS多快好省

    作者:阿里云用户goldsix PTS(性能测试服务)的官方定位是:集测试机管理.测试脚本管理.测试场景管理.测试任务管理.测试结果管理为一体的性能云测试平台.  不管定义是否高大上,一般用户尤其是我 ...

  2. Polly一种.NET弹性和瞬态故障处理库(重试策略、断路器、超时、隔板隔离、缓存、回退、策略包装)

    下载地址:https://github.com/App-vNext/Polly 该库实现了七种恢复策略. 重试策略(Retry) 重试策略针对的前置条件是短暂的故障延迟且在短暂的延迟之后能够自我纠正. ...

  3. jquery mobile 自定义图标

    Jquery Mobile框架包含了一组最常用的移动应用程序所需的图标,为了减少下载的大小,Jquery Mobile包含的是的白色的图标sprite图片,并自动在图标后添加一个半透明的黑圈以确保在任 ...

  4. HTML 5入门知识(四)

    表单的作用 表单不是表格,既不用来显示数据,也不用来布局网页.表单提供一个界面,一个入口,便于用户把数据提交给后台程序进行处理. 表单的数据传递方式method属性 表单的method属性用于指定在数 ...

  5. 关于程序中使用servlet-api.jar和jsp-api.jar与服务器lib包jar包冲突的问题

    问题描述:         程序中使用到javax.servlet.http.HttpServletRequest等类内容,然而这些类是依赖于tomcat容器lib包下的jar包,工程中导入这两个ja ...

  6. nagios外部命令接口

    http://nagios.manubulon.com/traduction/docs14en/extcommands.html https://old.nagios.org/developerinf ...

  7. 设计模式——工厂方法模式(Factory Method)

    原文地址:http://www.cnblogs.com/Bobby0322/p/4179921.html 介绍 在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计 ...

  8. 把IDENTITY_INSERT 设置为 ON ,还不能插入数据问题

    IDENTITY_INSERT 为 ON 时 , 必须把需要插入的列名列出来 不然报错 正确例子: SET IDENTITY_INSERT  table(表名) ONinsert into table ...

  9. Apache常见问题

    Apache如何修改端口? 找到Apache安装目录,conf目录下的httpd.conf文件,用编辑器打开. 找到“Listen 80”,修改为我们想要的端口号就可以了,如“Listen 8080” ...

  10. web中的cookie管理

    本篇是以JSP为背景介绍,但是在web开发中也是相同的原理. 什么是cookie 由于http是一种无状态的协议,因此服务器收到请求后,只会当做一次新的请求.即便你重复发送了1000次同样的请求,这1 ...