美文网首页
《使用面向对象技术创建高级Web应用》笔记

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

作者: stevenjobs | 来源:发表于2016-03-21 18:07 被阅读37次

    原文大意是作者面试一个妹子,发现妹子虽然有四五年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 库,则可以将它们包装在命名空间内,而不需要定义全局函数和类。

    相关文章

      网友评论

          本文标题:《使用面向对象技术创建高级Web应用》笔记

          本文链接:https://www.haomeiwen.com/subject/vriklttx.html