>>好吧，那么今天， 我将要讨论
关于JavaScript和它是如何 不同于其他语言
那你可能会对 以前喜欢PHP的。
因此，在上一讲 周一，我们谈了一下
关于什么是类似的，有什么 JavaScript之间熟悉
和PHP或Python或Ruby 或C或其他语言
那你已经 熟悉。
但实际上它的JavaScript 有一个非常独特的取材
在对象模型中，使 它像是完全不同的
比大多数语言中 你要去处理。
因此函数是一种
的怀才不遇 概念在JavaScript中。
他们的方法比更强大 他们在其他语言
因为他们可以 在 - 的原因之一，
他们能够成​​为 设置为值。
所以，在这里我们有 变种x等于功能
这是一个一流的 可以传递价值
围绕作为参数。
所以，你不必 声明函数x
并且只使用X IN的范围。
您可以通过x的值 各地的任何地方，你知道，
作为自变量进入 另一个函数
在这里您可以导出模块 正如大卫在节点提及。
所以接下来的问题是
该函数是一个 对象在JavaScript中。
所以，你可以实际设置 属性值
在功能和公正对待 它喜欢它的一个对象。
所以，当您使用 jQuery的，你知道，那美元
然后你通过 一个选择了进去
并调用它的函数。
但你也 曾元点的AJAX。
而这确实有点不 有道理，如果你认为
只是作为一个函数的 有些东西你可以调用
或致电。
但JavaScript允许你 在功能设置属性
为静态属性 与仅售X点someProp
正如我在那里。
第二点，我们是 要进入更多一点
在深度的事实是 函数可以被视为
作为类在JavaScript中。
因此，有概念 这种新的运营商
这将创建一个新的实例 以及一个排序函数
象类状体 这与它一起
我们打​​算去 到了一点多，
这就是所谓的原型。
而且它是什么品牌 JavaScript的非常独特的比较
其他语言 这是基于类的，
JavaScript是基于原型。
然后就在 底部有，
函数可以直接调用 说白了，因为我们已经习惯了。
所以，这不是什么新鲜事。
另一件事，是独特的是
该数组实际上是 对象。
他们不喜欢他们是在PHP
您只需创建 新的阵列。
这实际上是一个速记 这么说新的数组。
和数组实际上是一个 子类的一个对象。
所以这件事情 不同的，我会去
入少许更 细节上。
和调试功能
用JavaScript是真的 无可匹敌的，据我见过。
这是一个屏幕截图 Chrome的督察
我们要去 使用为休息
今天的演示。
而要得到这个，你只是 转到文件的开发者工具
开放的镀铬督察 或者你可以右键点击
然后单击显示元件I 认为这是在HTML页面
或者我认为这是命令 选项​​J打开这件事。
但我们会进入这个和你 实际上可以设置断点
因为你通过运行 JavaScript代码和排序
的评价是什么地方 变量是，什么样的价值
这是和它使得 这样更容易调试代码。
和鸵鸟政策 - 这不是 受限于浏览器端代码
但你实际上可以 运行一个实例
该铬督察 为您服务端代码
这实在是整齐的​​，因为你 用线穿过线可以加强
作为一个请求进入你的 服务器，看看发生了什么
并与变量玩 在控制台到这里。
因此，正如我所提到的，JavaScript的 是一种基于原型的语言
这意味着存在一组 哪是那种默认值
隐藏每个函数
在目标点 prototype属性。
所以它的排序的散列 只是不同的默认值
当你调用一个 使用new关键字的功能，
那些被设置 默认为功能
可用 在该实例。
所以这实际上是 - 对于真正有效
它是一种有效的方式 创建对象的内存明智
因为JavaScript的 运行时只需要跟踪
的对象的原型。
排序它指向
当你cretae新 实例一类。
你也可以模仿 继承众所周知
在基于类的语言 在那里你必须排序
像一个这样的延伸， 扩展了您可以模仿
在JavaScript的 通过什么所谓的
原型链。
我们将看到的例子 有关。
所以，如果你的 - jQuery插件 其实他们推荐的jQuery
作者用美元点 FN添加功能
jQuery库。
而我们究竟要 跳转到 - 那么，这个页面上，
我们有美元 - 我包括jQuery的。
如果你这样做美元 点缀在控制台
我提到把 您通过命令转变Ĵ
或者只是去查看， 开发者，开发者工具
和去Sources选项卡。
[无声备注]
哦，当然。所以，当我开始 在一个变型，
它的自动完成对我来说 什么是可用的在那里。
所以，我输入了美元，我可以 见我认为Chrome浏览器有一些
内置美元， 美元和美元按x。
所以现在我只想 美元和我放在一个点。
然后它表明我 所有属性
可用 在jQuery对象。
但如果我这样做美元 点样机，
我现在看到的所有方法 我已经习惯了使用
当我有美元，选择 然后我锁链，随着，
你知道，添加类或追加 或模糊或任何类似的。
这些都是实际 在原型
其中引擎盖下的jQuery 创造了自己的新实例
样的，它隐藏所有 这些细节你。
因此，问题是我是 做回看过来
同的功能，它们 其实从你隐藏原型
而只是它的别名 以美元点FN。
所以大多数人实际上 不知道
有一个原型 引擎盖下的佼佼者 -
你可以挖掘到和 添加额外的功能
每个jQuery的实例 如果你愿意的话。
因此，“新”运算符是 真的很难排序
了解在第一。
当你调用一个函数 用“新”，
它是一个完全不同的 调用函数的方式
因为如果你刚刚打电话 说白了。
因此，“新”运算符创建 所谓的新实例
一个物体或一个新的 的，你能想到的实例
将对象作为一类。
并且当此情况发生时，该值 这可能是熟悉的
从jQuery的， 他们那种设置此
到任何方便 的时间。
他们通常将其设置为 你是当前的DOM节点
作为你正在经历像 每个或类似的东西。
他们 - 这个值应该 是实例的值
您用“新”创造， 它包括一切
在原型链和所有 那你会找到方法
作为原型的属性。
所以它取决于 一个函数被调用时，
什么这个值。
它真的困惑 如果你是新来的JavaScript。
但每一个被称为功能 有 - 有这个价值。
所以，即使你还没有创建 事物的新实例，
这是假设 是全球性的。
或者你可以调用一个函数 使用调用方法
其中申请方法 在JavaScript中。
你可以在功能和 具体说明这应该是。
所以，你可以把它的动态， 这实在是厉害
也可以让你做 东西可以误导
和困惑 其他开发人员
如果他们不使用的事实。
和jQuery，我认为 使得它更加混乱
通过使它方便 并设置它
到当前DOM节点。
但简单的规则来记 什么的这个值是
当你正在寻找
在功能呼叫 什么是左点的。
所以，如果你有一个对象
它的东西点 什么是函数
那你打电话再 第一个值是什么值
这是。
因此，这里是一个代码示例
在那里我创造 字面的新对象
这仅仅是该对象 用大括号创建
而且我设置名字给Bob
然后我有一个sayName 方法这里的 -
所以这里面sayName 如果我做X点sayName，
这个值等于 为x因为左
点的为x。所以，如果 我把它叫做x点sayName，
它会说你好鲍勃。
然后另一个例子
在那里我居然分配 x点sayName，该函数
给变量Y， 这正如我所提到
在你的JavaScript 可以分配功能
每当你想要的变量， 它是真正灵活的方式，
但现在当我叫Y， 它失去了x的范围内。
所以这是现在全球或 如果你是在严格模式下，
我相信这是空 或不确定。
但是 - 因此，Y是不是你在做什么 期待在这里，如果你正在寻找
在x和你要去 打电话sayName，
你希望这个名字 应该是鲍勃。
但是，如果你把它关闭 该对象并把它称为
本身，这是现在全球。
而这就是我一直在提 当你看到美元这个点，
你通常不会想到的 什么是真正回事。
但是jQuery的排序有其 自己的领域特定语言
对付这一点， 它不是你使用什么
在JavaScript中。
我指出这一点 因为它真的很重要
编写结构良好 面向对象的代码
在JavaScript中真的有 有很好的理解和把握
这是如何工作以及如何 对象模型作品
以及如何在新的操作符。
否则，你最终 与jQuery的意大利面条
这里的一切是排序 的所有的地方
只有处理DOM。
如果你能真正 编写JavaScript
在一个更结构化的方式， 它使人们更方便
一起工作，进行排序 的分开的关注
该处理的 更新DOM和处理
与实际的逻辑和代码。
因此，让我们来看看一个 周围的数个例子。
所以，我这里有一些例子。
所以这只是一个简单的例子 使用JavaScript对象的
并增加了一些功能 它然后创建排序
就像一个微型的应用程序。
所以这是非常简单的实际。
它所做的唯一一件事就是 首先它会提示你的名字。
所以我会说添，然后你 可以改变你的名字给Bob。
这就是这一切 应用程序一样。
但我想该怎么点 出来是怎么做的。
所以，我有这个名字发生器 对象，它有一个start方法
询问用户 他们的名字
只要调用这个askForName
它在这儿了 做提示
如果名字没有被分配 然后它会要求再次
通过调用这个askForName。
然后一旦它的名称， 它会调用这个更新的名称。
因此，这则设置 在h1标签的用户名。
如果名称不 设置，它抛出一个错误。
[无声备注]
哦，当然。所以它设置 在h1标签的用户名
通过调用setDisplayName 其中设置HTML
在JS名称和容器 我在前面加上我所有的HTML
与JS的选择，只是因为 这是一个很好的习惯
成只是为了让 何尝不是如此混乱
当您使用 像ID或类选择器
两个风格和逻辑
在JavaScript 前端应用程序。
因为如果你有不同的 人工作组
在代码库和你 有选择有
设计者决定 改变，因为it's -
看起来不是很大，所以他们希望 放在一个新的类，并采取
出你和你依靠 它为JavaScript的目的，
那么你的代码打破。
这是很好的前缀和排序
像空间的大致 JavaScript相关的类
或属性 JS的前缀。
所以这是相当 简单，你可以看到
在所有这些情况下，我 调用返回这个底。
所以这是一个很好的 习惯进入，
给你一个它 有效的返回值。
在askForName我不 因为这是有道理的
你会得到的名字后面。
但是，允许 你做那么
如果返回此更新 命名，它的返回值
setDisplayName的是 返回这个值。
并允许您进行排序 链为你所用的
在jQuery的通过返回 这每一次的值。
这指的是 当前对象
所以你可以调用这个点 askForName点setDisplayName
它会保持 这种价值和让你
有一个很好的链存在。
然后在 - 所以在 这第二个例子。
[暂停]
好的。
确定。因此，让我们继续前进 并打开控制台
然后转到我的资源选项卡。
我们会弹出这个实际出发。
所以在Chrome开发 我所提到的工具，
还有这片 在右侧，而一 -
你可以看到这个站牌 虽然在默认情况下，它是黑色的。
但是，当您将鼠标放在它，它 说：“你上不例外暂停。
点击暂停 所有的异常。“
而当你点击它 再次，它会变成蓝色。
现在是随时 有抛出一个错误
在你的JavaScript代码，它会 停止在该点，并允许您
评估是怎么回事。
所以 - 而这真是一个有用的 概念是要指出。
然后，如果你点击 再次，它会变成紫色
这就是通常 我保持它。
它只是打破了代码 当有异常
还没有被抓到。
所以很多在jQuery的时间 例如，他们会尽力捕捉
以测试是否在浏览器 具有某种能力
并从那里继续。
这是唯一的时 有一个错误
这一直没有 陷入了一个尝试捕捉。
所以让我们尝试并提交 一个名称为空白。
这样我就可以看到， 代码现在停止
在updateName方法 我可以将鼠标放在名字
看看它是空的空白。
在那里，它是等于空白。
所以，如果不命名抛出一个新的 错误，现在我可以退一步
通过该功能 柱说，“好吧，
哪儿来的，“和 看看客户端的值是。
因此它具有askForName方法，
setDisplayName开始 和updateName。
而这仅仅是一个非常有用的 这样你可以看到有所有
可用的变量 在该范围内，以及
作为闭合变量， 所以说是封闭的东西
在由该函数。
所以我可以看到 - 什么客户端的值是
什么这个值。
所以这个'因为我们是 在jQuery是平等的
到当前的DOM元素。
但它确实很有用 用于调试的代码
要打破这样的错误。
的另一个特点 Chrome浏览器是督察
在任何时候，你可以 点击不同的线
在该行，它会 打破的地方
您已设置断点 它们被称为。
所以，如果我点击时， 行会变成蓝色。
因此，让我继续 执行这里，好了，这打破了。
现在让我们设置名称 爱丽丝和点击提交。
所以，现在我可以看到，即使 才到了点
更新的一切，它现在 停在这里，所以我可以看到
我的这个名字是爱丽丝 然后我就可以继续 -
让我重新加载页面。
好了，所以现在它的 在开始再次启动，
它已经停止在此 行，我可以看到
该名称是当前 未定义。
askForName是哪个函数 是，所以这也是非常有用
如果你具备的功能是 从不同的文件来
在或不同的地方 代码，你可以看到它在哪里，
然后跳转到的是， 它会高亮显示。
那么好拿到的习惯 使用调试工具
这不只是 安慰点日志。
好了，让我们来 看第二个例子
这使得更多的使用 原型，因为我已经提到。
所以在这个例子中，
我们创建了一个新的 函数调用CS
这就是资本 所以约定标准
在JavaScript是，如果一个 函数应该被用来
作为一个构造函数，而不是
只是一个正常的 功能，你利用它。
所以，我有资本CS和本 采用可变courseId
和courseTitle这 我设置这个courseId，
这courseTitle 在构造函数中。
然后我还设置学生 和讲座为空数组。
让你的原因 -
OK，这样的原型 性能进行了再定义
这儿有 - 所以模板 只是一个简单的下划线
模板，下划线的模板 作为一种方式，你可以 -
类似于模板 大卫所提到的
在服务器上，你可以 只写一个脚本标记
这是不是一个JavaScript 脚本，但文本的HTML
而我在做什么 用jQuery是 -
它并不把这些 开放，是啊，我们走吧。
使用jQuery，它得到了 该模板的HTML值
然后通过运行它 强调实用工具库
模板引擎。
这样的文档 因为这是到这里
该实用程序模板下
但基本上你可以阅读 多一点点吧。
但评估该字符串 并把它变成一个函数
然后我们可以通过数据 为它动态地调用。
接下来的两个方法我有 是addStudent和addLecture。
这些只是将它们添加到 我已经设置的内部阵列
在构造函数和 那么render方法。
所以，让我们创建新的 CS的实例调用164
其中有本课程 号164和标题。
然后CS50有 CS50和介绍到CS1
然后添加一些 学生讲课
然后调用CS50渲染。
如果我运行的代码，所以 我在做与评估和演示。
你从来没有真正想用 的评估，但我只是排序
采取一切 JavaScript代码是在这里
和执行它的飞行。
它呈现到这个 这些模板的新实例
其中有CS类的 的属性，所以我们已经走了
通过和做过addLecture 和addStudent每个。
正如我提到的 因为我回到这一点，
我其实可以把这些 addLecture和addStudent电话
它会很好的工作。
在JavaScript中的其他功能 这是更有益的
在服务器端，其中 你真的在任何给定时间
如果你的应用程序获得 更大的不知道你在哪里
并且它很难设置 这些个别的断点
我在提到 Chrome的检查是
使用调试器关键字。
所以它只是D-E-B-U-G-G-E-R。
而当你把一个调试器 在你的代码关键字
和你有 - 我们走吧，两名GS。
当你把调试器 在你的代码关键字
并且你正在运行一个调试器
如Chrome浏览器 这里督察
或在服务器侧铬 督察，它告诉JavaScript的
停止执行在该行 代码，然后它可以让你
步骤通过休息 代码的执行。
所以，如果我点击运行代码 在这里，它现在停止
在这个调试器行，我可以 看到好了，这里的CS50的价值
这是一个过程了 标题，当然身份证，
它有没有讲座， 没有学生。
然后我就可以通过一步 整个addLecture，
我可以看到它的推 在这些讲座，
鼠标放在那，“Hello World”的。
其实我可以在 控制台这样做，所以这是设置
当前对象 你是英寸
本次演讲是“世界你好”。
并保持步进 通过像我想要的。
如果我不想步骤
成一个函数调用“原因 我知道那是怎么回事
做进入addLecture， 有这个按钮就在这里
它说“步骤，在未来 函数调用，“所以我可以去
给点了，我也许 想知道的东西。
比如像164渲染。
所以在这一点上，它是 将要被渲染。
我可以看到这个模板 是编译后的模板。
我可以在这一点上，我看到 应该有两个学生
和两个讲座。
然后有原型 链，我指的是。
所以默认的自带 伴随着只是一个对象
在JavaScript中一般，
它带有两个字符串 构造函数的值。
然后那些 我对我自己添加
与addLecture，addStudent 然后将属性
所特有的这 类的实例
因为它被调用 使用new关键字。
因此，让我们做一 更多这方面的例子
然后，我们将逐步在一定 更有趣的事情
在服务器端。
因此，让我们继续前进，开 最后一个例子是 -
让我们来看看，这里是代码？
我不知道这个去了。
好了，好了，我们可以直接跳过 在这段代码然后实际 -
哦，等一下，我想我错过了 样式表的代码。
好了，让我们 这个有点大。
在这个例子中，我展示 更多关于设置有点
了原型链，
所以建立继承 使用JavaScript。
所以在这种情况下，我们也 目录这是怎么回事
到大概维持 多个课程。
所以一个目录有 一个addCourse方法。
因此，它会检查是否课程 这是在传递是一个实例
当然作为调用 使用new关键字。
所以，如果你试图发送
在不同的东西， 它会冲你大吼大叫。
渲染方法，将 呈现每个课程
通过编译它的模板下面。
我们有过程 其中接入
在这种情况下，对基类 个别部门课程。
和，而不是设置各
课程圆点 原型点法
或者使用扩展属性 助手在下​​划线库
排序通话的扩展 这个原型与所有
这些性质，这是 有用的，比较容易阅读。
然后到这里干什么 什么叫做设置
了原型链。
所以，这其实是一个小 棘手的人们在第一个
甚至仍然在做这件事 一段时间，它有点硬
来包装你的头部周围。
但不要让这种吓唬你。
所以我设置了一个新的 -
一类全新 反对在这里，CS。
并在构造函数中，
我说，当然 应用此参数。
这样的参数是一个特殊的 值我想你可以称它
在JavaScript中， 关键字里面有所有
在一切的的 沿着传递参数是
该功能可 用参数来调用，
与参数的关键字。
所以当我打电话 用点当然适用，
这是当前上下文 与CS被调用。
所以，当我与新来调用它 这是一个 - 这是CS的值。
而且我说把这种 当然，这里的方法了。
哦，对不起 - 调用这个 当然，方法就在这里
但是设置这个值 是什么值
这是在这里。
因此，应用关键字允许 你要排序的改变状态
这其中是多么的jQuery 被允许进行排序开关的
这项对你作为 你正在经历
并作出DOM元素 而不是jQuery对象。
所以，现在我要设置 临时函数
这将抢 原型课程。
和排序的设置 其原型
然后设置原型 在CS函数对象
到一个新的实例。
所以基本上我 而不是说 -
如果我在这儿做点CS 原型等于新课程。
那么这将是 调用一切
在这个构造函数，
我不会 一定要。
因此，所有我做的是 那种几乎创造
就像一个替代函数 将有原型的课程
对排序的它， 模仿的原型 -
的课程，但没有做 一切都在构造函数
并设置为原型。
然后，我只是 添加等部门
在这种情况下是计算机 科学为CS对象。
然后我有一个排序的 桥版这样做的。
它并不在IE9工作。
所以这就是为什么我想 显示排序如何 -
这是什么做 引擎盖下。
但是你可以将它设置 向上以相同的方式
其中经济学等于功能 当然，运用这些参数
然后说点经济学原型 等于物体点CreateCourse
点的原型。
因此，它会创建一个新的对象 这仅仅是原型
该课程，然后 设置部门那里。
所以，现在就让我们去设置一个 调试器在这里，点击运行。
我们走吧。
所以，CS164，我们可以看到 原型链，我们已经得到了
性能这是 在构造函数中设置。
因此，这些被设定的值 然后在原型链
对于CS对象它有 计算机科学系设置。
然后在底层 原型链，
然后我们把所有的 方法和属性
所特有的 课程对象。
然后我们有 基本对象。
因此，那种快速 例如原型链中。
正如你可以在这里看到，有 是每个部门两个值。
因此，有部 计算机科学
然后部门 我说没有列出
作为默认值在这里。
因此原型链 实际上只是一个单独
链接列表。
并且，因为它试图 找到一个属性，
它会开始在 顶级的价值。
那么什么是定义 构造函数
然后排序下井 原型链从那里。
所以，因为它发现，所以 -
如果在这里，我说 CS50点处，
它会说计算机科学。
但如果我说变种 -
[暂停]
但如果我说人文 等于新课程
然后我说人文 点部，
我会看到部门中未列出 因为它去了第一 -
我可以看看原型 链实际上在这里。
因此，它首先去的过程中 反对，看到没有什么
在原型链的 这个级别的部门
或为部门值，使 然后跳转到一个新的水平，
课程和外观 转发那里找到它。
因此，它只是有点像 下山从上而下
这就是排序 东西是独一无二的
关于JavaScript是 您可以更改任何
这些值在 任何给定的时间。
因此，在构造函数中或在 该对象上的各个方法
如果我想设置这个 部门新的东西，
或者如果我什至想设定 任何这些功能的
那些已经存在
新的东西， 我可以自由地做。
所以现在我有CS50点 addLecture，看起来像这样。
如果我想将它设置为 CS50 addLecture只是等于
空白的功能。
那么现在我可以看到它的 只是彻底改变
而你不能够 另做语言
在那里你有一个更严格的 基于类的继承
一切都是 排序的设置。
JavaScript是非常，非常 灵活的问候了。
好吧，让我们跳回到 在幻灯片中。
因此，举例来说如果你 总是喜欢一个函数
具有特定的 该值设置它。
你可以调用函数绑定点
并设置什么值 这应该是。
你可以把它看作是 -
“我试图想出一个 好现实世界的例子，但“
如果你想保护你的代码
针对有人可能 用一个值调用它
这不会是这样。
例如像AJAX 回调喜欢多余的或错误。
那些通常不叫
具有良好的语义 的这个值。
和你一样，“好吧，我总 希望这是值
课程对象 我正在与。
或者我的看法 在我的代码工作
表示此 DOM节点，可以设置 -
你可以绑定上下文这 然后当它后来被称为
通过jQuery和它不具有 良好的价值这一点，会坚持
什么你与有界的。
再有就是函数调用进行 您可以指定上下文
并指定任何变量 数量的参数。
再有就是功能 运用它可以通过
在上下文和 然后一个数组
或参数对象 我提到，你看那里。
在任何参数 您调用函数，
你可以只输入 单词“论点”
它会拥有所有 的论点。
它有一个“长度”的属性
这是5月的论据是如何 实际上传递给该方法
因为在JavaScript 您可以排序通话
具有可变号 的论点。
它是这么说有用 如果这有一个说法，
然后按照这个代码路径。
如果有两个，则可能 要遵循另一种方式。
它可以让你有真 动态的API为您的方法。
你能想到的 这与jQuery
就像当你有 美元点或绑定。
排序和它 不同的东西
至于你是否把一 参数或两个或三个
或用一个函数来启动它。
它使用的参数 属性
和论据 长度在很多情况下，
有这样的魔力 功能发生。
的东西，你不能这样做 参数是只使用它
默认情况下，作为一个数组。
所以，你可以说参数 3，将其设置的东西
你可以使用 数组赋值。
您可以使用 - 很多 的下划线方法
对于任何集合或 用于处理数组，
您可以通过在参数 它会实现
它的一个参数 对象和排序
中采取照顾你。
但是，如果你想要使用的 所传递的参数
通过一个函数作为数组，
您可以使用下划线 点2的数组。
一个数 效用函数
正在建设中强调。