当前分类 / 面向对象 / 总共4篇

立即执行函数和模块化

参考文档:《深入理解js立即执行函数》

概述

很多时候我们需要创建一个私有的命名空间,该命名空间的变量和方法,不会破坏污染全局的命名空间。此时若是想访问全局对象,将全局对象以参数形式传进去即可,如jQuery代码结构:

(function(window, undefined){ 
    //jquery code
})(window);

匿名函数和表达式

在了解立即执行函数之前先明确一下函数声明、函数表达式及匿名函数的形式:

//函数声明
function test(){  

}

//函数表达式
var test = function(){

}

//匿名函数
function(){

}

上面只有函数表达式是立即执行的。

阅读更多

JavaScript面向对象(3)

全局对象

我们知道在对象方法内部可以使用this来表示对象本身。

var hero = {
    name:'Rafaelo',
    sayName:function(){
        return this.name;
    }
}

>>> hero.sayName();
>>> "Rafaelo"

接下来我们通过构造器函数来创建对象

function Hero(){
    this.occupation = 'Ninja';
}

>>> var hero = new Hero();
>>> hero.occupation;
>>> "Ninja"

我们可以看出构造器的函数来创建对象有两个比较好的特点: 1. 可以在创建对象的时候传参数。 2. 在使用的时候才真正创建和执行。

阅读更多

JavaScript面向对象(2)

上一篇对继承进行了大量说明,回到我们的问题上,剩下的几个问题我们接下来看看

  1. 在JavaScript中,有接口吗?
  2. 在JavaScript中,如何使用函数这种特殊的对象?
  3. 在JavaScript中,闭包是什么?
  4. 在JavaScript中,有哪些奇技淫巧是Java所没有的?

JavaScript接口

在经典的 Java 面向对象语言中,可以用关键字 interface 来定义接口,用 implement 来实现接口,而 JavaScript 虽然也是面向对象语言,但是它并没有内置这些,不过由于 JavaScript 的灵活性,我们可以通过模拟来实现,方法是使用一个辅助类和辅助函数来协助完成这一过程。

阅读更多

JavaScript面向对象(1)

Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类)。那么,如果我们要把”属性”(property)和”方法”(method),封装成一个对象,甚至要从原型对象生成一个实例对象,我们应该怎么做呢?

作为多年使用Java的我,首先开始思考如下问题:

  1. 在JavaScript中,类如何定义,如何创建对象?
  2. 在JavaScript中,基本类型有对应的对象形式吗?
  3. 在JavaScript中,数组和函数是对象吗?
  4. 在JavaScript中,有继承和接口吗?
  5. 在JavaScript中,如何使用函数这种特殊的对象?
  6. 在JavaScript中,闭包是什么?
  7. 在JavaScript中,有哪些奇技淫巧是Java所没有的?

类和对象

在JavaScript中,类的定义只是一个Map键值对,没有其他。

var person = {
    name : "xiaohong",
    age  : 18
}

那么JavaScript中的类中没有方法吗?有!但是也是键值对。

var person = {
    name : "xiaohong",
    age : 18,
    eat : function(){
        alert("i like eat meat");
    }
}

阅读更多