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. golang之下载安装配置

    1.下载:根据操作系统和计算架构选择合适的安装包,操作系统类型有linux.mac.windows等,计算架构分为32位的386计算架构和64位的amd64计算架构 2.安装:推荐安装到 /usr/l ...

  2. font-weight

    font-weight 属性设置文本的粗细. 该属性用于设置显示元素的文本中所用的字体加粗.数字值 400 相当于 关键字 normal,700 等价于 bold. 每个数字值对应的字体加粗必须至少与 ...

  3. Codeforces 13C

    这题纠结了近半年,一直没有好的思路. 刚开始看这题的时候就是暴力,明显的TLE 后来才知道这题的“一种解”肯定是"原数列中某些数的集合" (很明显这题的最优策略并不唯一) 有原数列 ...

  4. 只在需要的时候 Polyfill 你的 JavaScript 代码

    本文转载自 Pascal Klau,他是一名来自德国南部的实习生,他讨厌不必要的 HTTP 请求,也不爱吃西兰花.Pascal 将说明使用 polyfill 服务的一种方式,在这种方式下你可能可以完全 ...

  5. VS2008中为控件添加属性(比如前景色,背景色)

    VS2008中没有classwizard,但不要伤心,到了VS2010,classwizard又回来了. 可以参照这篇博客:http://blog.csdn.net/candyliuxj/articl ...

  6. hdu5444 乱搞 长春网赛

    可以暴力. #include<iostream> #include<cstring> #define maxn 1100 using namespace std; int a[ ...

  7. codeblocs的安装使用

    安装后,上面菜单栏 点击“Setting --> Compiler” "Creat a new project"

  8. 如何创建一个非常酷的3D效果菜单

    http://www.cocoachina.com/ios/20150603/11992.html 原文地址在这里.原文 去年,读者们投票选出了Top5的iOS7最佳动画,当然也很想看到有关这些动画如 ...

  9. struts.xml中的结果类型与视图

    实际上在Struts2框架中,一个完整的结果视图配置文件应该是: ? 1 2 3 4 5 <action name="Action名称" class="Action ...

  10. oracle函数 sqrt(x)

    [功能]返回x的平方根 [参数]x数字型表达式 [返回]数字 [示例] select sqrt(64),sqrt(10) from dual; 返回:8 , 3.16227766