日期:2014-05-16  浏览次数:20307 次

javascript学习笔记(函数、对象、继承)

JavaScript 是一段段地执行的。一段代码中的定义式函数语句会优先执行,这似乎有点象静态语言的编译概念。所以,这一特征也被有些人称为:JavaScript 的“预编译”。

?

函数就是对象,只不过比一般的对象多了一个括号“()”操作符,这个操作符用来执行函数的逻辑。

?

call方法举例说明

function WhoAmI() //定义一个函数WhoAmI
{
alert("I'm " + this.name + " of " + typeof(this));
};
WhoAmI(); //此时是this 当前这段代码的全局对象,在浏览器中就是window 对象,其
name 属性为空字符串。输出:I'm of object
var BillGates = {name: "Bill Gates"};
BillGates.WhoAmI = WhoAmI; //将函数WhoAmI 作为BillGates 的方法。
BillGates.WhoAmI(); //此时的this 是BillGates。输出:I'm Bill Gates of obje
ct
var SteveJobs = {name: "Steve Jobs"};
SteveJobs.WhoAmI = WhoAmI; //将函数WhoAmI 作为SteveJobs 的方法。
SteveJobs.WhoAmI(); //此时的this 是SteveJobs。输出:I'm Steve Jobs of o
bject
WhoAmI.call(BillGates); //直接将BillGates 作为this,调用WhoAmI。输出:I'm B
ill Gates of object
WhoAmI.call(SteveJobs); //直接将SteveJobs 作为this,调用WhoAmI。输出:I'
m Steve Jobs of object
BillGates.WhoAmI.call(SteveJobs); //将SteveJobs 作为this,却调用BillGates 的
WhoAmI 方法。输出:I'm Steve Jobs of object
SteveJobs.WhoAmI.call(BillGates); //将BillGates 作为this,却调用SteveJobs 的
WhoAmI 方法。输出:I'm Bill Gates of object
WhoAmI.WhoAmI = WhoAmI; //将WhoAmI 函数设置为自身的方法。
WhoAmI.name = "WhoAmI";
WhoAmI.WhoAmI(); //此时的this 是WhoAmI 函数自己。输出:I'm WhoA
mI of function
({name: "nobody", WhoAmI: WhoAmI}).WhoAmI(); //临时创建一个匿名对象并
设置属性后调用WhoAmI 方法。输出:I'm nobody of object

?

?

在 JavaScript 中,prototype 不但能让对象共享自己财富,而且prototype 还有寻根问祖的
天性,从而使得先辈们的遗产可以代代相传。当从一个对象那里读取属性或调用方法时,如果该对象自身
不存在这样的属性或方法,就会去自己关联的prototype 对象那里寻找;如果prototype 没有,又会去p
rototype 自己关联的前辈prototype 那里寻找,直到找到或追溯过程结束为止。

?

1 function Person(name) //基类构造函数
2 {
3 this.name = name;
4 };
5
6 Person.prototype.SayHello = function() //给基类构造函数的prototype 添加方法
7 {
8 alert("Hello, I'm " + this.name);
9 };
10
11 function Employee(name, salary) //子类构造函数
12 {
13 Person.call(this, name); //调用基类构造函数
14 this.salary = salary;
15 };
16
17 Employee.prototype = new Person(); //建一个基类的对象作为子类原型的原型,
这里很有意思
18
19 Employee.prototype.ShowMeTheMoney = function() //给子类添构造函数的pr
ototype 添加方法
20 {
21 alert(this.name + " $" + this.salary);
22 };
23
24 var BillGates = new Person("Bill Gates"); //创建基类Person 的BillGates 对象
25 var SteveJobs = new Employee("Steve Jobs", 1234); //创建子类Employee
的SteveJobs 对象
26
27 BillGates.SayHello(); //通过对象直接调用到prototype 的方法
21
28 SteveJobs.SayHello(); //通过子类对象直接调用基类prototype 的方法,关注!
29 SteveJobs.ShowMeTheMoney(); //通过子类对象直接调用子类prototype 的方法
30
31 alert(BillGates.SayHello == SteveJobs.SayHello); //显示:true,表明prototyp
e 的方法是共享的