10月 8, 2014 |
Nix.Huang
javascript中只有对象(Object),没有类的概念。function关键字只是定义函数对象的一个变种形式。默认通过function关键字产生的对象会作为window对象的一个属性存在。当我们使用new 关键字作用于某个函数对象,将产生一个新的对象,可以将这个对象理解成一个新的范围,这样在这个新的范围内,this不再指向默认的window 对象,而是我们新产生的对象。
一个实例胜过千万句空话,让我们用事实说话。
实例1-类似java成员函数的实现:
function Person(name) {
this.name = name ;
//B()类似java的成员函数。
this.B = function() {
console.log(this + " B()");
}
//重写toString,便于标识
this.toString=function() {
return "[" + this.name + "]";
}
}
var p = new Person("javacoder.cn");
p.B();
1
2
3
4
5
6
7
8
9
10
11
12
13
functionPerson(name){
this.name=name;
//B()类似java的成员函数。
this.B=function(){
console.log(this+" B()");
}
//重写toString,便于标识
this.toString=function(){
return"["+this.name+"]";
}
}
varp=newPerson("javacoder.cn");
p.B();
输出为:
[javacoder.cn] B()
实例2-类似java的共有静态函数的实现
Person.C = function(){
//this 指代整个Person函数对象,
//javascript的函数也是对象
console.log(this + "C()");
}
1
2
3
4
5
Person.C=function(){
//this 指代整个Person函数对象,
//javascript的函数也是对象
console.log(this+"C()");
}
输出为:
function Person(name) {
this.name = name ;
this.B = function() {
console.log(this + " B()");
}
//重写toString,便于标识
this.toString=function() {
return "[" + this.name + "]";
}
} C()
Function对象的toString()方法会将整个函数的定义输出。
实例3-类似java成员函数的另一种实现
//类似java的成员函数,和函数B的效果类似,
//但是方便于prototype继承
Person.prototype.D = function() {
console.log(this + "D()");
}
1
2
3
4
5
//类似java的成员函数,和函数B的效果类似,
//但是方便于prototype继承
Person.prototype.D=function(){
console.log(this+"D()");
}
输出结果为:
[javacoder.cn] D()
实例4-动态给对象添加函数,java没有的功能
//定义一个只属于对象p的函数,java没有对应的用法
p.E = function () {
console.log(this + "E()");
A("from p.E");
}
1
2
3
4
5
//定义一个只属于对象p的函数,java没有对应的用法
p.E=function(){
console.log(this+"E()");
A("from p.E");
}
输出为:
[javacoder.cn] E()
实例5-类似java静态私有方法的实现。
function Person(name) {
this.name = name ;
//定义了一个只能在Person内部使用的工具函数
//类似java的私有静态函数
A = function(str) {
//this指向window对象,费解?????
console.log(this + ", A() ," + str);
}
//类似java的成员函数
this.B = function() {
A("js");
console.log(this + "B()");
}
}
var p = new Person("javacoder.cn");
p.B();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
functionPerson(name){
this.name=name;
//定义了一个只能在Person内部使用的工具函数
//类似java的私有静态函数
A=function(str){
//this指向window对象,费解?????
console.log(this+", A() ,"+str);
}
//类似java的成员函数
this.B=function(){
A("js");
console.log(this+"B()");
}
}
varp=newPerson("javacoder.cn");
p.B();
输出为:
[object Window], A() ,js
[object Object]B()
我也是js初学者,欢迎交流