1、面向对象:类的标志,通过类可创建多个具有相同属性和方法的对象
2、创建对象
1)工厂模式方式:避免重复实例化但未能解决识别问题
 function boss(name, age) {
          var obj = new Object();
          obj.name = name;
          obj.age = age;
          obj.run = function () {
            return "姓名:" + this.name + ",年龄:" + this.age + ",我们都从属于boss"
          };
          return obj;  //必须返回对象引用(obj),否则得不到对象
        }
        var boss1 = new boss("张三", 58);
        console.log(boss1.run());
        console.log(typeof boss1);//object
        console.log(boss1 instanceof Object);//true  这里的boss1是boss对象的引用
        function boss2(name, age) {
          var obj = new Object();
          obj.name = name;
          obj.age = age;
          obj.run = function () {
            return "姓名:" + this.name + ",年龄:" + this.age + ",我们都从属于boss"
          };
          return obj;  //必须返回对象引用(obj),否则得不到对象
        }
        var boss2 = new boss2("李四", 58);
        console.log(boss2.run());
        console.log(boss2 instanceof Object);//true  这里的boss2是boss2对象的引用
         工厂模式都是object对象没办法区分
2)(构造函数方式:避免重复实例化并能解决对象识别问题)
       function Boss(name,age) {
          this.name = name;//this代表当前构造函数所声明的对象。
          this.age = age;
          this.run = function () {
            return "姓名:"+this.name+",年龄:"+this.age+",我们都从属于Boss"
          };
        }
        var employee1= new Boss("张三",18);//创建对象
        console.log(employee1.run());
        var employee2= new Boss("李四",25);
        console.log(employee2.run());
  console.log(employee1 instanceof Boss);//true
  function Desk(name,age) {
          this.name = name;//this代表当前构造函数所声明的对象。
          this.age = age;
          this.run = function () {
            return "姓名:"+this.name+",年龄:"+this.age+",我们都从属于Boss"
          };
        }
       var desk1= new Desk("张三",18);//创建对象
       var desk2= new Desk("张三",18);//创建对象
        console.log(desk1.run());
console.log(desk1 instanceof Boss);//false 说明已经识别到不是Boss对象的引用而是Desk对象的引用
console.log(desk1 instanceof Desk);//true 
        
       var o = new Object();//此时没有run方法,但是又想执行run方法就只能使用对象冒充
       Desk.call(o,"hello",100);
        
alert(desk1.run);//构造函数中的方法执行时不加圆括号就是打印的引用地址,
alert(desk2.run);//分别打印 desk1.run 和 desk2.run 会将整个run方法打印出来且一样
        alert(desk1.run == desk2.run);//false 比较的是引用地址(唯一性),引用类型是绝对不相等的
构造函数里的方法run()可以用new Function来代替(没必要,这样只是为了直观的看到是引用类型)
this.run = new Function (" return \'姓名:\' + this.name + \',年龄:\' + this.age + \',我们都从属于Boss
\'");
构造函数特点:
1.没有显示的创建对象(new Object),会自动在后台执行了new Object();
2.直接将属性和方法赋值给this对象
3.没有return语句
4.函数名和实例化构造名相同且大写,便于区别普通函数
5.通过构造函数创建对象,必须使用new运算符。(调用),普通函数调用是无效的
6.在构造函数体内,this代表当前构造函数所声明的对象。
7.所有构造函数的对象其实就是Object。
8.构造函数体内的方法的值是相等的,但是比较的是引用地址(唯一性),引用类型不相等(要想实现引用地址的一致
性,可将构造函数内部的方法run提出来通过全局来实现,但是没必要,因为run方法要是作为全局的则可直接调用,但
是直接调用又会报错,且明明是构造函数内部的方法却没有封装的感觉)

js基础——面向对象(构造函数)的更多相关文章

  1. JS基础(三)构造函数

    JS中的构造函数 <script language="JavaScript"> window.onload = function(){ function Bottle( ...

  2. JS基础_构造函数修改

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. JS基础_构造函数

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 面向对象JS基础讲解,工厂模式、构造函数模式、原型模式、混合模式、动态原型模式

    什么是面向对象?面向对象是一种思想!(废话). 面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法.这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.接下 ...

  5. 面向对象JS基础

    什么是面向对象?面向对象是一种思想!(废话). 面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法.这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.接下 ...

  6. JavaScript基础笔记(四) JS式面向对象

    JS式面向对象 一.理解对象 一)属性类型 ECMA-262 第 5 版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特征. ECMA-262 定义这些特性是为 ...

  7. JS基础入门篇(三十五)—面向对象(二)

    如果没有面向对象这种抽象概念的小伙伴,建议先看一下我写的JS基础入门篇(三十四)-面向对象(一)

  8. 【 js 基础 】Javascript “继承”

    是时候写一写 "继承"了,为什么加引号,因为当你阅读完这篇文章,你会知道,说是 继承 其实是不准确的. 一.类1.传统的面向类的语言中的类:类/继承 描述了一种代码的组织结构形式. ...

  9. JavaScript--我发现,原来你是这样的JS:面向对象编程OOP[1]--(理解对象和对象属性类型)

    一.介绍 老铁们,这次是JS的面向对象的编程OOP(虽然我没有对象,心累啊,但是可以自己创建啊,哈哈). JS高程里第六章的内容,这章内容在我看来是JS中很难理解的一部分.所以分成三篇博客来逐个理清. ...

随机推荐

  1. 如何把一个普通的Eclipse项目改造成Eclipse Plugin项目

    New Project->Plug-in from existing JAR Archive 同时要记得不仅要将你要转换的项目的jar包选上,同时还要将项目依赖的jar包全部选上(要不然会找不到 ...

  2. 网页性能测试之WebPageTest

    想知道您的网站,性能怎么样? 很自然,首先得找一个广被认可的测试工具.我们推荐WebPageTest: WebPageTest 它是google 开源项目”make the web faster “的 ...

  3. 基于jQuery,bootstrap的bootstrapValidator的学习(一)

    bootstrap:能够增加兼容性的强大框架. 因为移动端项目需要数据验证,就开始学习了bootstrapValidator . 1.需要引用的文件: css: bootstrap.min.css b ...

  4. 跨域知识(二)——JSONP

    JSONP是服务器与客户端跨源通信的常用方法.最大特点就是简单适用,老式浏览器全部支持,服务器改造非常小. 它的基本思想是,网页通过添加一个<script>元素,向服务器请求JSON数据, ...

  5. python ddt 实现数据驱动

    ddt 是第三方模块,需安装, pip install ddt DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据) 通常情况下,data中的数据按照一个参数传递给测试用例,如果da ...

  6. oracle-Mount

    执行nomount的所有工作,另外附加数据结构并与这些数据结构进行交互.这时,oracle从控制文件中获得信息. 可以执行的任务是: 执行数据库的完全恢复操作 重命名数据文件 改变数据库的归档状态. ...

  7. oracle如何启用审计

    通过数据库初始化参数文件中的AUDIT_TRAIL 初始化参数启用和禁用数据库审计. DB  启用数据库审计并引导所有审计记录到数据库的审计跟踪 OS  启用数据库审计并引导所有审计记录到操作系统的审 ...

  8. 网络流24题 搭配飞行员(DCOJ8000)

    题目描述 飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭 ...

  9. 2019-9-2-win10-uwp-随着数字变化颜色控件

    title author date CreateTime categories win10 uwp 随着数字变化颜色控件 lindexi 2019-09-02 12:57:38 +0800 2018- ...

  10. python 六种典型的异常