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. PHP核心编程--目录操作(包含文件操作)

    一.目录操作 1.    创建目录 创建目录mkdir(目录名称)  //返回值为布尔 一次性创建主目录及其子目录 判断是不是一个目录is_dir  //返回true,false 判断目录或文件是否存 ...

  2. text-align:justify在项目中碰到的问题

    最近在项目中,使用了一个新的样式属性:text-align:justigy,这个属性在使用过程中遇到了一些小异常,现在总结下.  text-align有一个属性值为justify,为对齐之意.其实现的 ...

  3. 实现手机网页调起原生微信朋友圈分享的工具nativeShare.js

    http://www.liaoxiansheng.cn/?p=294 我们知道现在我们无法直接通过js直接跳转到微信和QQ等软件进行分享,但是现在像UC浏览器和QQ浏览器这样的主流浏览器自带一个分享工 ...

  4. KDD2016,Accepted Papers

    RESEARCH TRACK PAPERS - ORAL Title & Authors NetCycle: Collective Evolution Inference in Heterog ...

  5. Beetl 3中文文档 转载 http://ibeetl.com/guide/

    Beetl作者:李家智(闲大赋) <xiandafu@126.com> 1. 什么是Beetl 广告:闲大赋知识星球,付费会员 Beetl( 发音同Beetle ) 目前版本是3.0.7, ...

  6. javascript正则表达式和字符串RegExp

    这篇文章主要介绍了javascript正则表达式和字符串RegExp and String(一)的相关资料,需要的朋友可以参考下     前言     正则表达式是javascript非常重要和常用的 ...

  7. C++ lambda表达式总结

    一个lambda表达式用于创建闭包.lambda表达式与任何函数类似,具有返回类型.参数列表和函数体.与函数不同的是,lambda能定义在函数内部.lambda表达式具有如下形式 [ capture ...

  8. 一条SQL完成跨数据库实例Join查询

    背景 随着业务复杂程度的提高.数据规模的增长,越来越多的公司选择对其在线业务数据库进行垂直或水平拆分,甚至选择不同的数据库类型以满足其业务需求.原本在同一数据库实例里就能实现的SQL查询,现在需要跨多 ...

  9. HZOJ Dash Speed

    测试点1-2:暴力. 测试点3-4:可以将边按r从大到小排序不断加入,然后用并茶几维护深度.好像也可以用猫树做. 好吧其他的部分分并没有看懂. 正解: 线段树分治,求出每个速度的答案. 对于速度区间$ ...

  10. 一维数组的初始化及遍历 Day06

    package com.sxt.arraytest1; import java.util.Arrays; /* * 一维数组 */ public class ArrayTest2 { public s ...