JavaScript编程(终极篇)

JavaScript 实现是由以下 3 个不同部分组成的:
    核心(ECMAScript)
    文档对象模型(DOM)
    浏览器对象模型(BOM)

1、数据类型

typeof 运算符

对变量或值调用 typeof 运算符将返回下列值之一:
    undefined - 如果变量是 Undefined 类型的
    boolean - 如果变量是 Boolean 类型的
    number - 如果变量是 Number 类型的
    string - 如果变量是 String 类型的
    object - 如果变量是一种引用类型或 Null 类型的

2、Object 对象

Object 对象具有下列属性:
constructor
    对创建对象的函数的引用(指针)。对于 Object 对象,该指针指向原始的 Object() 函数。
Prototype
    对该对象的对象原型的引用。对于所有的对象,它默认返回 Object 对象的一个实例。

Object 对象还具有几个方法:
hasOwnProperty(property)
    判断对象是否有某个特定的属性。必须用字符串指定该属性。(例如,o.hasOwnProperty("name"))
IsPrototypeOf(object)
    判断该对象是否为另一个对象的原型。
PropertyIsEnumerable
    判断给定的属性是否可以用 for...in 语句进行枚举。
ToString()
    返回对象的原始字符串表示。对于 Object 对象,ECMA-262 没有定义这个值,所以不同的 ECMAScript 实现具有不同的值。
ValueOf()
    返回最适合该对象的原始值。对于许多对象,该方法返回的值都与 ToString() 的返回值相同。
注释:上面列出的每种属性和方法都会被其他对象覆盖。

3、实例对象

声明和实例化

对象的创建方式是用关键字 new 后面跟上实例化的类的名字:
var oObject = new Object();

本地对象

本地对象就是JavaScript定义的类(引用类型)。它们包括:
    Object
    Function
    Array
    String
    Boolean
    Number
    Date
    RegExp
    Error
    EvalError
    RangeError
    ReferenceError
    SyntaxError
    TypeError
    URIError

4、this、call、apply

4、函数

函数是由这样的方式进行声明的:关键字 function、函数名、一组参数,以及置于括号中的待执行代码。
函数的基本语法是这样的:
function functionName(arg0, arg1, ... argN) {
  statements
}

arguments 对象

检测参数个数
还可以用 arguments 对象检测函数的参数个数,引用属性 arguments.length 即可

Function 对象(类)

用 Function 类直接创建函数的语法如下:
var obj = new function(arg1, arg2, ..., argN, function_body)

在上面的形式中,每个 arg 都是一个参数,最后一个参数是函数主体(要执行的代码)。这些参数必须是字符串。

5、匿名函数

(function(){

})()

用处:加载后执行,私有函数不对外开放;

var fn = (function () {
    var basket = [];
    function privateMethod() {
        console.log("匿名函数已执行");
    }
    return {
        publicMethod: function () {
            privateMethod();
        }
    };
}())

----------------------------------------------

(function (window, factory) {
    //执行
    window.lib = factory();
})(this, function () {
    //主体函数
    var pluns = {
        output: function (b) {
            return b;
        }
    };
    return pluns;
})
//调用
var put = lib.output('msg');
console.log(put);

CommonJS框架:

第一步:

var moudules = {}; //对象字面量
function define(name, deps, impl) {
    for (var i = 0; i < deps.length; i++) {
        deps[i] = moudules[deps[i]];
    }
    moudules[name] = impl.apply(impl, deps);
    console.log(moudules[name]);
}
moudules.get = function(name) {
    return moudules[name];
}
define('bar', [], function () {
    function hello(who) {
        return 'Let me introduce:' + who;
    }
    return {
        hello: hello
    }
});
var bar = moudules.get('bar');
console.log(bar.hello('nihao'));

第二步

(function(define){
            define(function () {                
                console.log("匿名函数已执行");
            });
        })(typeof define == "function" ? define : function (factory) { factory()});
fn.publicMethod();

6、构造函数

7、原型(prototype)

 DOM(文档对象模型)
    Document
    Body
    Style
    ……

BOM(浏览器对象模型)

  Window 对象
  Navigator 对象
  Screen 对象
  History 对象
  Location 对象

 HTML 对象

<body>

<a>

……

所有HTML树节点

封装 - 把相关的信息(无论数据或方法)存储在对象中的能力
聚集 - 把一个对象存储在另一个对象内的能力
继承 - 由另一个类(或多个类)得来类的属性和方法的能力
多态 - 编写能以多种方法运行的函数或方法的能力

对象字面量

Facade模式
var module = (function () {
    var _private = {
        val: 5,
        get: function () {
            console.log(this.val);
        },
        set: function (val) {
            this.val = val;
        },
        run: function () {
            console.log('running');
        },
        jump: function () {
            console.log('jumping');
        }
    };
    return {
        facade: function (args) {
            _private.set(args.val);
            _private.get();
            if (args.run) {
                _private.run();
            }
        }
    }
}());
//调用
module.facade({ run: true, val: 10 });

module
exports
require
global

原文地址:https://www.cnblogs.com/sntetwt/p/8674554.html