JavaScript基础视频教程总结(061-070章)

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>061-070章总结</title>
  6. </head>
  7. <body>
  8. <pre>
  9. 061. this
  10. 解析器在调用函数每次都会向函数内部传递进一个隐含的参数,
  11. 这个隐含的参数就是this,this指向的是一个对象,
  12. 这个对象我们称为函数执行的 上下文对象,
  13. 根据函数的调用方式的不同,this会指向不同的对象
  14. 1.以函数的形式调用时,this永远都是window
  15. 2.以方法的形式调用时,this就是调用方法的那个对象
  16. </pre>
  17. <script type="text/javascript">
  18. console.log("第061");
  19. function fun61(){
  20. console.log(this.name)
  21. }
  22. // 以函数形式调用,this是window
  23. fun61()
  24. var obj611 ={
  25. name:'obj611',
  26. sayName:fun61
  27. }
  28. var obj612 ={
  29. name:'obj612',
  30. sayName:fun61
  31. }
  32. console.log(obj611.sayName == fun61); // true
  33. var name = "全局name"
  34. // 以方法的形式调用,this是调用方法的对象
  35. obj611.sayName()
  36. </script>
  37. <pre>
  38. 062. this的补充
  39. </pre>
  40. <script type="text/javascript">
  41. console.log("第062")
  42. var age ="全局age"
  43. function fun62(){
  44. console.log(this.name)
  45. }
  46. var obj621 ={
  47. name:'obj621',
  48. sayName:fun62
  49. }
  50. var obj622 ={
  51. name:'obj622',
  52. sayName:fun62
  53. }
  54. obj621.sayName()
  55. </script>
  56. <pre>
  57. 063. 使用工厂方法创建对象
  58. 通过该方法可以大批量的创建对象
  59. </pre>
  60. <script type="text/javascript">
  61. console.log("第063");
  62. function createPerson(name,age,gender){
  63. //创建一个新的对象
  64. var obj = new Object()
  65. //向对象中添加属性
  66. obj.name = name
  67. obj.age = age
  68. obj.gender = gender
  69. obj.sayName = function(){
  70. console.log(this.name)
  71. }
  72. //将新的对象返回
  73. return obj
  74. }
  75. var obj631 = createPerson("阿三",18,"男")
  76. obj631.sayName()
  77. </script>
  78. <pre>
  79. 064. 构造函数
  80. 创建一个构造函数,专门用来创建Person对象的
  81. 构造函数就是一个普通的函数,创建方式和普通函数没有区别,
  82. 不同的是构造函数习惯上首字母大写
  83. 构造函数和普通函数的区别就是调用方式的不同
  84. 普通函数是直接调用,而构造函数需要使用new关键字来调用
  85. 构造函数的执行流程:
  86. 1.立刻创建一个新的对象
  87. 2.将新建的对象设置为函数中this,在构造函数中可以使用this来引用新建的对象
  88. 3.逐行执行函数中的代码
  89. 4.将新建的对象作为返回值返回
  90. 使用同一个构造函数创建的对象,我们称为一类对象,也将一个构造函数称为一个类。
  91. 我们将通过一个构造函数创建的对象,称为是该类的实例
  92. this的情况:
  93. 1.当以函数的形式调用时,this是window
  94. 2.当以方法的形式调用时,谁调用方法this就是谁
  95. 3.当以构造函数的形式调用时,this就是新创建的那个对象
  96. </pre>
  97. <script type="text/javascript">
  98. console.log("第064");
  99. function Person01(name,age,gender){
  100. this.name = name
  101. this.age = age
  102. this.gender = gender
  103. this.sayName = function(){
  104. console.log(this.name)
  105. }
  106. }
  107. var zhangSan = new Person01("张三",30,"男")
  108. zhangSan.sayName()
  109. // 使用instanceof可以检查一个对象是否是一个类的实例
  110. console.log(zhangSan instanceof Person01)
  111. // 所有的对象都是Object的后代
  112. console.log(zhangSan instanceof Object)
  113. </script>
  114. <pre>
  115. 065. 构造函数修改
  116. </pre>
  117. <script type="text/javascript">
  118. console.log("第065");
  119. /*
  120. * 创建一个Person构造函数
  121. * - 在Person构造函数中,为每一个对象都添加了一个sayName方法,
  122. * 目前我们的方法是在构造函数内部创建的,
  123. * 也就是构造函数每执行一次就会创建一个新的sayName方法
  124. * 也是所有实例的sayName都是唯一的。
  125. * 这样就导致了构造函数执行一次就会创建一个新的方法,
  126. * 执行10000次就会创建10000个新的方法,而10000个方法都是一摸一样的
  127. * 这是完全没有必要,完全可以使所有的对象共享同一个方法
  128. */
  129. function Person02(name,age,gender){
  130. this.name = name
  131. this.age = age
  132. this.gender = gender
  133. }
  134. // 向原型中添加sayName方法
  135. Person02.prototype.sayName = function(){
  136. console.log("我是" + this.name)
  137. }
  138. var liSi = new Person02("李四",25,"男")
  139. liSi.sayName();
  140. </script>
  141. <pre>
  142. 066. 原型对象
  143. 原型 prototype
  144. 我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype
  145. 这个属性对应着一个对象,这个对象就是我们所谓的原型对象
  146. 如果函数作为普通函数调用prototype没有任何作用
  147. 当函数以构造函数的形式调用时,它所创建的对象中都会有一个隐含的属性,
  148. 指向该构造函数的原型对象,我们可以通过__proto__来访问该属性
  149. 原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,
  150. 我们可以将对象中共有的内容,统一设置到原型对象中。
  151. 当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用,
  152. 如果没有则会去原型对象中寻找,如果找到则直接使用
  153. 以后我们创建构造函数时,可以将这些对象共有的属性和方法,统一添加到构造函数的原型对象中,
  154. 这样不用分别为每一个对象添加,也不会影响到全局作用域,就可以使每个对象都具有这些属性和方法了
  155. </pre>
  156. <script type="text/javascript">
  157. console.log("第066");
  158. function MyClass(){
  159. }
  160. MyClass.prototype.a = "prototype的a"
  161. MyClass.prototype.sayHello = function(){
  162. console.log("hello")
  163. }
  164. var mc01 = new MyClass()
  165. console.log(MyClass.prototype)
  166. console.log(mc01.__proto__ == MyClass.prototype)
  167. mc01.a = "mc01的a"
  168. console.log(mc01)
  169. mc01.sayHello()
  170. </script>
  171. <pre>
  172. 067. 原型对象2
  173. 原型对象也是对象,所以它也有原型,
  174. 当我们使用一个对象的属性或方法时,会现在自身中寻找,
  175. 自身中如果有,则直接使用,
  176. 如果没有则去原型对象中寻找,如果原型对象中有,则使用,
  177. 如果没有则去原型的原型中寻找,直到找到Object对象的原型,
  178. Object对象的原型没有原型,如果在Object原型中依然没有找到,则返回undefined
  179. </pre>
  180. <script type="text/javascript">
  181. console.log("第067");
  182. function MyClass02(){
  183. }
  184. MyClass02.prototype.name = "prototype的name"
  185. var mc02 = new MyClass02()
  186. mc02.age = 18
  187. // 使用in检查对象中是否含有某个属性时,如果对象中没有但是原型中有,也会返回true
  188. console.log(mc02)
  189. console.log("name" in mc02) // true
  190. //可以使用对象的hasOwnProperty()来检查对象自身中是否含有该属性
  191. console.log(mc02.hasOwnProperty("age")) // true
  192. console.log(mc02.hasOwnProperty("name")) // false
  193. console.log(mc02.hasOwnProperty("hasOwnProperty")) // false
  194. console.log( mc02.__proto__.hasOwnProperty("hasOwnProperty") ) // false
  195. console.log( mc02.__proto__.__proto__.hasOwnProperty("hasOwnProperty") ) // true
  196. console.log( mc02.__proto__.__proto__.__proto__ ) // null
  197. console.log(MyClass02)
  198. console.log(MyClass02.hasOwnProperty("name")) // true
  199. console.log(MyClass02.hasOwnProperty("toString")) // false
  200. console.log(MyClass02.hasOwnProperty("hasOwnProperty")) // false
  201. console.log(Object)
  202. console.log(Object.hasOwnProperty("hasOwnProperty")) // false
  203. console.log(Object.prototype.hasOwnProperty("hasOwnProperty")) // true
  204. </script>
  205. <pre>
  206. 068. toString()
  207. 当我们直接在页面中打印一个对象时,事件上是输出的对象的toString()方法的返回值
  208. 如果我们希望在输出对象时不输出[object Object],可以为对象添加一个toString()方法
  209. </pre>
  210. <script type="text/javascript">
  211. console.log("第068");
  212. function Person03(name,age,gender){
  213. this.name = name
  214. this.age = age
  215. this.gender = gender
  216. }
  217. console.log(Person03)
  218. // 修改Person03原型的toString
  219. Person03.prototype.toString = function(){
  220. return "Person03 [ name=" +this.name +" ,age= "+this.age +",gender= " + this.gender +"]"
  221. }
  222. var wangSan = new Person03("王三",20,"男")
  223. var result = wangSan.toString()
  224. console.log(result)
  225. </script>
  226. <pre>
  227. 069. 垃圾回收
  228. 垃圾回收(GC:garbage collection)
  229. - 就像人生活的时间长了会产生垃圾一样,程序运行过程中也会产生垃圾
  230. 这些垃圾积攒过多以后,会导致程序运行的速度过慢,
  231. 所以我们需要一个垃圾回收的机制,来处理程序运行过程中产生垃圾
  232. - 当一个对象没有任何的变量或属性对它进行引用,此时我们将永远无法操作该对象,
  233. 此时这种对象就是一个垃圾,这种对象过多会占用大量的内存空间,导致程序运行变慢,
  234. 所以这种垃圾必须进行清理。
  235. - 在JS中拥有自动的垃圾回收机制,会自动将这些垃圾对象从内存中销毁,
  236. 我们不需要也不能进行垃圾回收的操作
  237. - 我们需要做的只是要将不再使用的对象设置null即可
  238. </pre>
  239. <script type="text/javascript">
  240. console.log("第069");
  241. var obj69 = new Object();
  242. //对对象进行各种操作
  243. obj69 = null;
  244. console.log(obj69)
  245. </script>
  246. <pre>
  247. 070. 数组简介
  248. 数组(Array)
  249. - 数组也是一个对象
  250. - 它和我们普通对象功能类似,也是用来存储一些值的
  251. - 不同的是普通对象是使用字符串作为属性名的,
  252. 而数组时使用数字来作为索引操作元素
  253. 索引:
  254. 从0开始的整数就是索引
  255. - 数组的存储性能比普通对象要好,在开发中我们经常使用数组来存储一些数据
  256. </pre>
  257. <script type="text/javascript">
  258. console.log("第070");
  259. //创建数组对象
  260. var arr = new Array()
  261. // 使用typeof检查一个数组时,会返回object
  262. console.log(typeof arr)
  263. console.log(arr instanceof Object) // true
  264. console.log(arr instanceof Function) //false
  265. //向数组中添加元素 语法:数组[索引] = 值
  266. arr[0] = 0
  267. arr[1] = 1
  268. arr[5] = 5
  269. arr[10] = 10
  270. // 读取数组中的元素 语法:数组[索引] 如果读取不存在的索引,他不会报错而是返回undefined
  271. console.log(arr[1])
  272. console.log(arr[2]) // undefined
  273. // 可以使用length属性来获取数组的长度(元素的个数) 语法:数组.length
  274. // 对于连续的数组,使用length可以获取到数组的长度(元素的个数)
  275. // 对于非连续的数组,使用length会获取到数组的最大的索引+1 , 尽量不要创建非连续的数组
  276. console.log("arr长度= " + arr.length) // 11
  277. // 如果修改的length大于原长度,则多出部分会空出来
  278. // 如果修改的length小于原长度,则多出的元素会被删除
  279. arr.length = 20
  280. console.log(arr.length) // 20
  281. console.log(arr) // [0, 1, empty × 3, 5, empty × 4, 10, empty × 9]
  282. //向数组的最后一个位置添加元素
  283. //语法:数组[数组.length] = 值;
  284. arr[arr.length] = 70
  285. console.log(arr) // [0, 1, empty × 3, 5, empty × 4, 10, empty × 9, 70]
  286. arr[arr.length] = 80
  287. console.log(arr) // [0, 1, empty × 3, 5, empty × 4, 10, empty × 9, 70, 80]
  288. </script>
  289. </body>
  290. </html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 学习 JavaScript 需要从以下几个方面入手: 1. 了解 JavaScript 的基本语法,包括变量、数据类型、运算符、流程控制语句等。 2. 学习 JavaScript 中的函数、数组、对象等常用的数据结构。 3. 了解 JavaScript 中的 DOM(文档对象模型)和 BOM(浏览器对象模型),学会如何使用 JavaScript 操作网页元素。 4. 了解 JavaScript 中的事件处理,学会如何使用 JavaScript 处理网页中的各种事件。 5. 了解 JavaScript 中的 AJAX(异步 JavaScript 和 XML),学会如何使用 JavaScript 实现网页的异步加载。 6. 学习 JavaScript 的高级应用,包括正则表达式、JSON、模块化等。 学习 JavaScript 的方法有很多,你可以选择在线教程、视频课程、书籍或者培训机构进行学习。在学习过程中,认真完成课程练习和自己独立完成一些小项目都是很有帮助的。 ### 回答2: 学习Javascript可以按照以下步骤进行: 1. 了解基础知识:首先,可以通过学习Javascript的基本概念、语法和特性来入门。可以找一本入门教材、在线教程或者观看视频教程来帮助理解。 2. 实践编码:理论知识只是学习的一部分,更重要的是通过实践编码来巩固所学知识。可以选择一些简单的小项目来练习编写Javascript代码,并且要有耐心和毅力。 3. 参考文档和教程:在学习过程中遇到问题时,可以查阅官方文档或者搜索相关问题的教程和解答。W3School、MDN等网站都提供了丰富的Javascript文档和教程。 4. 参与社区和讨论组:加入一些Javascript开发者的社区或者讨论组,与其他开发者交流经验和分享问题。在这些社区中,可以获取到更多关于Javascript的实践经验和技巧。 5. 阅读优秀的代码:阅读其他经验丰富的Javascript开发者的优秀代码,可以从中学习到一些优秀的编码习惯和解决问题的思路。 6. 持续学习和实践:学习Javascript是一个不断迭代的过程,持续学习和实践是必不可少的。跟随最新的Javascript趋势、了解新的开发框架和工具,并积极应用到实际项目中。 总结起来,学习Javascript需要通过学习基础知识、实践编码、参考文档、参与社区、阅读优秀代码以及持续学习和实践等多个方面来提高自己的技能水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值