面向对象的三大特性:

  

  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、 封装简单的工厂函数(不推荐)

        

function    creatObj(name, age){
var obj = {
boj : name;
obj: age;
sayHello : function(){
console.log('');
}
}
return obj;
}

    4、 自定义构造函数

       

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

构造函数是干什么用的?

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

对象的创建过程

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. mui 的注意事项点

    1.mui的subpage在微信浏览器中不能正常工作. 2.MUI支持json格式解析: 调用JSON.parse(data)或者JSON.stringify(data); 3.

  2. ASP.NET MVC 音乐商店 - 6. 使用 DataAnnotations 进行模型验证

    在前面的创建专辑与编辑专辑的表单中存在一个问题:我们没有进行任何验证.字段的内容可以不输入,或者在价格的字段中输入一些字符,在执行程序的时候,这些错误会导致数据库保存过程中出现错误,我们将会看到来自数 ...

  3. SharePoint 2013 - Callout

    1. 没有OOTB的方法对Callout进行修改,Callout可以使用在以下范围: Document Library Assert Library Images Library Pages Libr ...

  4. Android StickHeaderRecyclerView - 让recyclerview头部固定

    介绍在项目中有时会需要recyclerview滑动式时某个view滑出后会固定在头部显示,比较常用的比如手机联系人界面.地区选择界面等. StickHeaderRecyclerView就是实现这个功能 ...

  5. 【Linux】TFTP & NFS 服务器配置

    Why?--交叉开发 一.交叉开发模型 宿主机(PC)------ 网络.串口.USB.JTAG ------ 目标机(ARM系统) PC机作为TFTP & NFS 服务器,目标机从网络下载软 ...

  6. 使用weinre调试Web应用及PhoneGap应用

    Web开发者经常使用Firefox的firebug或者Chrome的开发人员工具进行Web调试,包括针对JavaScript,DOM元素和CSS样式的调试.但是,当我们期望为移动Web站点或应用进行调 ...

  7. 什么是PDM?

    PDM的含义 PDM的中文名称为产品数据管理(Product Data Management). PDM是一门用来管理所有与产品相关信息(包括零件信息.配置.文档.CAD文件.结构.权限信息等)和所有 ...

  8. (原创)攻击方式学习之(3) - 缓冲区溢出(Buffer Overflow)

    堆栈溢出 堆栈溢出通常是所有的缓冲区溢出中最容易进行利用的.了解堆栈溢出之前,先了解以下几个概念: 缓冲区 简单说来是一块连续的计算机内存区域,可以保存相同数据类型的多个实例. 堆栈     堆 栈是 ...

  9. 通过yum安装最新服务

    给yum添加所安装服务最新rpm源  #这里用mysql为例 # wget dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm # y ...

  10. 配置xtrabackup备份mysql数据库

    下载地址:https://www.percona.com/downloads/XtraBackup/LATEST/ 为了方便起见本次安装使用yum源安装方式 1    安装yum源:yum insta ...