《使用面向对象技术创建高级Web应用》笔记

原文大意是作者面试一个妹子,发现妹子虽然有四五年JS经验,实际却对JS知之甚少。作者思前想后,最终点灯熬油(脑补),有了这篇经验之谈。

原文:Create Advanced Web Applications With Object-Oriented Techniques

中文:使用面向对象的技术创建高级Web应用程序

JavaScript对象就是词典

在 C++ 或 C# 中,在谈论对象时,是指类或结构的实例。对象有不同的属性和方法,具体取决于将它们实例化的模板(即类)。而 JavaScript 对象却不是这样。在 JavaScript 中,对象只是一组名称/值对,就是说,将 JavaScript 对象视为包含字符串关键字的词典。

JavaScript 对象/词典只接受字符串关键字,而不是像 Python 词典那样接受可哈希化的对象。

JavaScript函数一流

在很多编程语言中,函数和对象通常被视为两样不同的东西。在 JavaScript 中,其差别很模糊 — JavaScript 函数实际上是具有与它关联的可执行代码的对象。

  1. 向对象添加方法将是很容易的事情:只需选择名称,然后将函数赋给该名称。因此,我通过将匿名函数分别赋给相应的方法名称,在对象中定义了三个方法:
  2. JavaScript 中的函数是对象。每个函数对象都有一个名为 call 的方法,它将函数作为第一个参数的方法进行调用。就是说,作为函数第一个参数传递给 call 的任何对象都将在函数调用中成为“this”的值。
  3. 绝不要调用包含“this”(却没有所属对象)的函数。否则,将违反全局命名空间,因为在该调用中,“this”将引用全局对象,而这必然会给您的应用程序带来灾难。例如,下面的脚本将更改 JavaScript 的全局函数 isNaN 的行为。一定不要这样做!

示例

alert(“NaN is NaN: “ + isNaN(NaN));

function x() {
    this.isNaN = function() { 
        return “not anymore!”;
    };
}
// alert!!! trampling the Global object!!!
x();
alert(“NaN is NaN: “ + isNaN(NaN));

构造函数不是类

Javascript没有类,函数在与 "new" 运算符一起使用时,函数将充当构造函数。“new” 运算符执行的操作很简单。首先,它创建一个新的空对象。然后执行紧随其后的函数调用,将新的空对象设置为该函数中“this”的值。

var spot = new DogConstructor(“Spot”);

等同于:

var spot = {}; 
DogConstructor.call(spot, “Spot”);

原型

在 JavaScript 中,每个函数都有名为“prototype”的属性,用于引用原型对象。此原型对象又有名为“constructor”的属性,它反过来引用函数本身。这是一种循环引用

静态属性和方法

闭包

模拟私有属性

从类继承

模拟命名空间

JavaScript没有任何特定语言功能来支持命名空间,但很容易使用对象来模拟命名空间。如果要创建一个 JavaScript 库,则可以将它们包装在命名空间内,而不需要定义全局函数和类。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 博客内容:什么是面向对象为什么要面向对象面向对象编程的特性和原则理解对象属性创建对象继承 什么是面向对象 面向对象...
    _Dot912阅读 1,471评论 3 12
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,280评论 0 4
  • 今天在读《刻意学习》这本书时,作者安德斯·艾利克森提到的一个词让我印象深刻,“瞬间最佳决策”。这个词指在短时内对当...
    山河万朵阅读 716评论 0 3
  • 很多事情现在不做,也许,以后就再也没有实现的可能了。 而你想做一件事情,全世界都会帮助你。 如果可以 如果你愿意 ...
    徒步散魂阅读 328评论 0 1
  • 经哥哥分享,知道今晚8点古典老师在《得到》有直播。由于今晚公司有饭局,完了回到家大概是9点左右,所以只看了结尾的一...
    玲夏ling阅读 204评论 1 0