`
nth42nth
  • 浏览: 8771 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

JavaScript 构造函数

 
阅读更多

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专栏
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics