一、关键字new

javaScript的函数,
1、直接执行函数,返回的是undefined。
2、使用new,返回的是对象。

如果函数没有返回值时,返回this。

function Person(name){this.name=name;this.say=function(){console.log("hello "+name);}
}

测试代码如下:

var jonny = Person("jonny");
console.log(jonny); //输出undefined
var jonny = new Person("jonny");
console.log(jonny); //输出Person {name: "jonny", say: ƒ}

在 new 是内部处理流程如下:

new Person() = {var obj = new Object();obj.__proto__ = Person.prototype;var result = Person.call(obj); //obj就有了Person函数里的属性return obj;
}
  1. 创建一个空对象 obj。
  2. 把空对象的原型链上级设置成Person的原型函数。
  3. 更换this调用。
  4. 返回obj。

如果有return的话,分两种情况。

  1. return的是五种简单数据类型:String,Number,Boolean,Null,Undefined。
    这种情况下,忽视return值,依然返回this对象。
function Person(name){this.name=name;this.say=function(){console.log("hello "+name);}return 1;
}var a = new Person("johny");
console.log(a);  //输出Person {name: "johny", say: ƒ}
  1. return的是Object。
    这种情况下,不再返回this对象,而是返回return语句的返回值。
function Person(name){this.name=name;this.say=function(){console.log("hello "+name);}return {hello:this.say};
}var a = new Person("johny");
console.log(a); //输出{hello: ƒ}

二、原型添加的函数

function Person(name){this.name=name;this.say=function(){console.log("hello "+name);}
}
Person.prototype.eat = function() {console.log('eat food');
};
var p1 = new Person('p1');
var p2 = new Person('p2');p1.say === p2.say // false
p1.eat === p2.eat // true

给对象添加的方法,对象的每个实例都有实例各自的方法;
给对象的原型添加方法,对象的每个实例共享同一个方法。节省了内存。

三、内部变量和内部方法

;function Person(name){// 内部变量var _name=name; // 内部方法var _say=function(){console.log("hello "+_name);}return {say: _say}
};var a = new Person("a");
a.say();

四、静态方法

在函数本身上定义的方法,只能通过函数调用,new出来的对象不能够调用。

function Person(){}
Person.sayHi=function(){console.log("Hi!");
};Person.sayHi();//输出Hi!

五、静态对象

jQuery.Person 是一个静态对象,实际就是直接执行匿名函数创建的一个对象。

;jQuery.Person = (function (){// 内部变量var _name=''; // 内部方法var _say = function(name){name && (_name= name); console.log("hello "+_name);}return {say: _say }
})();jQuery.Person.say('mic'); //输出hello mic

JavaScript - 理解面向对象编程相关推荐

  1. 了解使用JavaScript进行面向对象编程的基础(并增强您的编码…

    by Kris Baillargeon 通过克里斯·拜伦 学习使用JavaScript进行面向对象编程的基础知识(并增强您的编码能力!) (Learn the basics of object-ori ...

  2. 如何通俗的理解面向对象编程

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:磐创AI 面向对象编程或OOP对于初学者来说可能是一个很 ...

  3. JavaScript 的面向对象编程

    发现一个介绍JavaScript面向对象编程的文章,大家可以下下看看:http://pan.baidu.com/share/link?shareid=69566&uk=2802880612 本 ...

  4. 如何更准确的理解面向对象编程中的对象

    现在面向对象的编程思想已经有好长的历史了,我们可能天天都在运用.我们应该如何理解它呢?100个人可能有100种答案,因为它太容易理解了,同时也是最难真正理会其含义的.理解好理解,但在实际的编程当中我们 ...

  5. JavaScript(四)——面向对象编程、BOM、DOM、表单验证、jQuery

    文章目录 1. 面向对象编程 2. 操作BOM对象(重点) 3. 操作DOM对象(重点) 4. 操作表单(验证) 5. jQuery 1. 面向对象编程 (1) 原型对象 javascript.Jav ...

  6. 如此理解面向对象编程

    从Rob Pike 的 Google+上的一个推看到了一篇叫<Understanding Object Oriented Programming>的文章,我先把这篇文章简述一下,然后再说说 ...

  7. 怎么理解面向对象编程【java基础第一讲】

    面向对象编程(OOP)是什么 OOP:Object Oriented Programming.要讲面向对象我们先来理解一下面向过程的含义,如果你已经有c语言相关的开发经验可能就已经明白面向过程的意义. ...

  8. javascript俄罗斯方块 面向对象编程(jQuery)(附带百度网盘链接)

    这个俄罗斯方块游戏是通过javascript面向对象编程的方法编写,代码结构分为游戏类(Game.js),方块类(block.js),地图类(Map.js),方块形状对象类(blockjson.js) ...

  9. 理解面向对象编程思想

    面向过程 面向过程概念:是一种编程思想,就是分析出解决问题所需要的步骤,然后用方法把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. 通过下面造车案例了解 面向过程特点:开发周期慢,但是性能 ...

  10. java 以一个例子来理解面向对象编程思想

    在面向对象的编程中,面向对象的应用是检验你对现实中实际物体和及其关系的抽象能力.在实际编程过程中,你的能力并不是你掌握了多少新的技术,而是对你当前问题的认识的深度,当你理解的足够深的时候,你的框架就出 ...

最新文章

  1. 【Sql server: T-Sql 技术内幕 系列】之索引篇
  2. Python数据结构——array
  3. Python正则表达式之修改,分割,搜索和替换字符串(6)
  4. 告警系统的一些痛点思考
  5. hdu 3065 AC自动机
  6. MybatisPlus实现自动填充
  7. Azure系列2.1.13 —— CloudBlockBlob
  8. 高倍数泡沫装置PHP_找煤机网:BGP高倍数泡沫灭火装置
  9. java cpu利用率上不去_Java 面试突击之 Java 并发知识基础 amp; 进阶考点全解析
  10. 网页设计太麻烦?15款免费优质Bootstrap UI工具包助你效率倍增!
  11. 7.EVE-NG硬盘扩容,存储海量镜像
  12. QThread实现多线程
  13. 群晖系统硬盘损毁的修复
  14. 幸运抽奖系统带后台源码
  15. 修改网页logo图片
  16. Aimo:盘姬工具箱CruiserEXP forWin.
  17. 国产操作系统都有哪些功能?普通人能满足日常使用吗?
  18. Ping++通过PCI DSS认证,保护企业用户信息安全
  19. 只有学历没有学位证的研究生_没有研究生学位就进入数据科学
  20. 计算机找不到网络设备,解决在设备管理器中找不到网卡的问题

热门文章

  1. 浪潮gs开发平台学习---平台快速开发入门
  2. [转帖]javascript做浮点数运算精确问题
  3. python - - 函数 - - 递归函数
  4. [JAVA] JAVA 类路径
  5. Asp.net 构建可扩展的的Comet Web 应用(一)
  6. 常用的C语言库函数实现
  7. 配置eclipse插件
  8. Atlas Control Toolkit更新发布V1.0.60914.0
  9. jQuery中的join方法
  10. 30.卷1(套接字联网API)---客户/服务器程序设计规范