面向对象的javascript(一)

面向对象javascript
一、Function就是最优秀的对象
1、在javascript中函数functions是最优秀的对象,他们能够存储变量,也

能作为一个参数传递给一个方法,它也能够作为一个方法的返回值。这些特性都

使得function具有无比的灵活性。
2、我们可以创建“匿名方法”,形如下面的语法:function(){...},可以发现

他们没有函数签名,你可以把这个匿名方法赋给变量。下面举一个匿名方法的例

子:
(function(){
  var foo=10;
  var bar=2;
  alert(foo*bar);
}
)();
这个函数匿名函数并没有赋值给任何一个变量,注意到最后一对圆扩符,这个申

明使得这个匿名方法会立即得到执行。当然,上面的例子中匿名方法后的括号中

是空的,没有携带任何参数,实际上,我们也可以为它写上参数:
(function(foo,bar){
  alert(foo*bar);
}
)(10,2);
这个方法的执行结果和上面的执行结果一样。你也让匿名方法返回一个值,让后

再将这个值赋给一个变量:
var baz = (function(foo, bar) {
return foo * bar;
})(10, 2);
// baz will equal 20.
更有趣的是,我们可以通过匿名函数创建闭包。闭包的概念有很专业的解释,着

这里简单化,闭包中可以存放一些受保护的数据,闭包的创建是通过嵌入式的

functions,我们都知道javascript的变量域,一个在函数当中定义的变量时不可

在函数被访问的。而函数运行的范围取决于它所定义的区域,而不是执行它的区

域。这一点很重要。这两点就可以让我们吧一些要保护的数据放到匿名方法里,

你可以利用这一点来为类创建私有类型变量(private variables):
/* An anonymous function used as a closure. */
var baz;
(function() {
var foo = 10;
var bar = 2;
baz = function() {
return foo * bar;
};
})();
baz(); // baz can access foo and bar, even though it is executed

outside of the
// anonymous function.
二、易扩展、易变形的对象
在javascript中,所有东西都是对象,除了三个基本类型

(string,number,boolean),而且这些对象都是可变的。譬如:
function displayError(message) {
displayError.numTimesExecuted++;
alert(message);
};
displayError.numTimesExecuted = 0;
就是说,你可以再实例化或定义好一个类之后再去修改这个类或者这个实例的属

性或方法。

/* Class Person. */
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype = {
getName: function() {
return this.name;
},
getAge: function() {
return this.age;
}

/* 实例化person类. */
var alice = new Person('Alice', 93);
var bill = new Person('Bill', 30);

/* 为类的原型增加方法. */
Person.prototype.getGreeting = function() {
return 'Hi ' + this.getName() + '!';
};

/* 为某个实例增加方法. */
alice.displayGreeting = function() {
alert(this.getGreeting());
}
上面的代码中,getGreeting的修改将会影响所有的类的实例,而

displayGreeting则只会影响alice这一个实例。

原文地址:https://www.cnblogs.com/shineqiujuan/p/1732375.html