JavaScript 构造函数
2011年08月19日
JavaScript里虽然没有类这个概念,但是可以通过定义伪类即构造函数和原型对象prototype来实现。
一、构造函数说明
JavaScript新建一个对象可以通过new关键字来实现
var obj=new Object();
这个前提是必须首先定义了这个函数,才可以对其new一个新对象。JavaScript里本身已经有一些对象可以使用了,所
以我们在自定义一个对象的时候要首先知道JavaScript有哪些对象是可以直接使用的,避免重复出错。
JavaScript里有三种类型的对象:本地对象,内置对象,宿主对象,关于这三个类型的对象的详细参见 这里 。不过我
这里还是说明一下。
(1)本地对象
ECMA-262 把本地对象(native object)定义为“独立于宿主环境的 ECMAScript 实现提供的对象”。简单来说,本
地对象就是 ECMA-262 定义的类(引用类型)。它们包括:(图片是借用的不过忘记出处了)
Object Function Array String Boolean Number Date RegExp Error EvalError
RangeError ReferenceError SyntaxError TypeError URIError
(2)内置对象
ECMA-262 把内置对象(built-in object)定义为“由 ECMAScript 实现提供的、独立于宿主环境的所有对象,
在 ECMAScript 程序开始执行时出现”。这意味着开发者不必明确实例化内置对象,它已被实例化了。
ECMA-262 只定义了两个内置对象,即 Global 和 Math (它们也是本地对象,根据定义,每个内置对象都
是本地对象)。
(3)宿主对象
所有非本地对象都是宿主对象(host object),即由 ECMAScript 实现的宿主环境提供的对象。所有 BOM
和 DOM 对象都是宿主对象。也就是说宿主对象包括内置对象以及自定义的对象。
知道了JavaScript中的对象类型后我们就可以构建对象了。对于本地对象我们需要实例化再使用,内置对象可以直接
使用,因为其本身就已经实例化了,对于宿主对象是重点,因为我们首先要定义(即构造函数)这个对象,这个就是
这篇文章的重点了。
(二)构造函数使用
JavaScript中构造函数这个词儿似乎挺玄妙的,用的最多的其实就是创建一个function对象。
var obj=new fun1();
obj.show(); //obj.show is not a function
obj.show1(); //我是周阿里!
obj.show2(); //我是周阿里哈哈!
obj.show3(); //我是周阿里嘿嘿!
alert( obj.hobby );//undefined
obj.show4(); //obj.show4 is not a function
fun1.prototype.show=function(){ alert("周阿里!"); }
fun1.prototype.hobby="K歌";
function fun1(){
this.name="周阿里";
this.gender="女";
this.show1=function(){ //此方法可以通过fun1的实例调用
alert("我是周阿里!");
}
function show2(){ //此方法不可以通过fun1的实例调用,这能在fun1内部使用
alert("我是周阿里哈哈!");
}
fun1.prototype.show3=function(){
alert("我是周阿里呵呵!");
}
}
obj.show4(); //obj.show4 is not a function
fun1.prototype.show4=function(){ alert("我是周阿里嘿嘿!"); }
obj.show4(); //我是周阿里嘿嘿!
obj.show2();// obj.show2 is not a function 从这个例子中可以很容易的看出如下的结论:
(1)通过new创建一个对象的实例会首先执行它的构造函数,并且不存在new对象在构造函数前还是后的顺序,
放在什么地方都是一样的。
(2)在构造函数外使用prototype添加的方法或者属性的调用必须在申明之后,否则会报错:xx is not a function
或者返回为undefined ,如上面黄条部分所示效果
(3)构造函数中如果不通过this来指定的话,就只能在该函数内部使用,外部无法调用,上例绿条所示
类别:javascript专栏
2011年08月19日
JavaScript里虽然没有类这个概念,但是可以通过定义伪类即构造函数和原型对象prototype来实现。
一、构造函数说明
JavaScript新建一个对象可以通过new关键字来实现
var obj=new Object();
这个前提是必须首先定义了这个函数,才可以对其new一个新对象。JavaScript里本身已经有一些对象可以使用了,所
以我们在自定义一个对象的时候要首先知道JavaScript有哪些对象是可以直接使用的,避免重复出错。
JavaScript里有三种类型的对象:本地对象,内置对象,宿主对象,关于这三个类型的对象的详细参见 这里 。不过我
这里还是说明一下。
(1)本地对象
ECMA-262 把本地对象(native object)定义为“独立于宿主环境的 ECMAScript 实现提供的对象”。简单来说,本
地对象就是 ECMA-262 定义的类(引用类型)。它们包括:(图片是借用的不过忘记出处了)
Object Function Array String Boolean Number Date RegExp Error EvalError
RangeError ReferenceError SyntaxError TypeError URIError
(2)内置对象
ECMA-262 把内置对象(built-in object)定义为“由 ECMAScript 实现提供的、独立于宿主环境的所有对象,
在 ECMAScript 程序开始执行时出现”。这意味着开发者不必明确实例化内置对象,它已被实例化了。
ECMA-262 只定义了两个内置对象,即 Global 和 Math (它们也是本地对象,根据定义,每个内置对象都
是本地对象)。
(3)宿主对象
所有非本地对象都是宿主对象(host object),即由 ECMAScript 实现的宿主环境提供的对象。所有 BOM
和 DOM 对象都是宿主对象。也就是说宿主对象包括内置对象以及自定义的对象。
知道了JavaScript中的对象类型后我们就可以构建对象了。对于本地对象我们需要实例化再使用,内置对象可以直接
使用,因为其本身就已经实例化了,对于宿主对象是重点,因为我们首先要定义(即构造函数)这个对象,这个就是
这篇文章的重点了。
(二)构造函数使用
JavaScript中构造函数这个词儿似乎挺玄妙的,用的最多的其实就是创建一个function对象。
var obj=new fun1();
obj.show(); //obj.show is not a function
obj.show1(); //我是周阿里!
obj.show2(); //我是周阿里哈哈!
obj.show3(); //我是周阿里嘿嘿!
alert( obj.hobby );//undefined
obj.show4(); //obj.show4 is not a function
fun1.prototype.show=function(){ alert("周阿里!"); }
fun1.prototype.hobby="K歌";
function fun1(){
this.name="周阿里";
this.gender="女";
this.show1=function(){ //此方法可以通过fun1的实例调用
alert("我是周阿里!");
}
function show2(){ //此方法不可以通过fun1的实例调用,这能在fun1内部使用
alert("我是周阿里哈哈!");
}
fun1.prototype.show3=function(){
alert("我是周阿里呵呵!");
}
}
obj.show4(); //obj.show4 is not a function
fun1.prototype.show4=function(){ alert("我是周阿里嘿嘿!"); }
obj.show4(); //我是周阿里嘿嘿!
obj.show2();// obj.show2 is not a function 从这个例子中可以很容易的看出如下的结论:
(1)通过new创建一个对象的实例会首先执行它的构造函数,并且不存在new对象在构造函数前还是后的顺序,
放在什么地方都是一样的。
(2)在构造函数外使用prototype添加的方法或者属性的调用必须在申明之后,否则会报错:xx is not a function
或者返回为undefined ,如上面黄条部分所示效果
(3)构造函数中如果不通过this来指定的话,就只能在该函数内部使用,外部无法调用,上例绿条所示
类别:javascript专栏