JS的构造函数

简介:
// 构造函数
  // 使自己的对象多次复制,同时实例根据设置的访问等级可以访问其内部的属性和方法
  // 当对象被实例化后,构造函数会立即执行它所包含的任何代码
  function  myObject(msg){
      // 特权属性(公有属性)
      this .myMsg = msg;  // 只在被实例化后的实例中可调用
      this .address = '上海';
     
      // 私有属性
      var  name = '豪情';
      var  age = 29;
      var  that =  this ;
     
      // 私有方法
      function  sayName(){
         alert(that.name);
     }
      // 特权方法(公有方法)
      // 能被外部公开访问
      // 这个方法每次实例化都要重新构造而prototype是原型共享,所有实例化后,都共同引用同一个
      this .sayAge =  function (){
         alert(name);  // 在公有方法中可以访问私有成员
     }
      // 私有和特权成员在函数的内部,在构造函数创建的每个实例中都会包含同样的私有和特权成员的副本,
      // 因而实例越多占用的内存越多
 }
  // 公有方法
  // 适用于通过new关键字实例化的该对象的每个实例
  // 向prototype中添加成员将会把新方法添加到构造函数的底层中去
 myObject.prototype.sayHello =  function (){
     alert('hello everyone!');
 }
  // 静态属性
  // 适用于对象的特殊实例,就是作为Function对象实例的构造函数本身
 myObject.name = 'china';
  // 静态方法
 myObject.alertname =  function (){
     alert( this .name);
 }
  // 实例化
  var  m1 =  new  myObject('111');
  // ---- 测试属性 ----//
  // console.log(myObject.name); //china
  // console.log(m1.name); //undefined, 静态属性不适用于一般实例
  // console.log(m1.constructor.name); //china, 想访问类的静态属性,先访问该实例的构造函数,然后在访问该类静态属性
  // console.log(myObject.address); //undefined, myObject中的this指的不是函数本身,而是调用address的对象,而且只能是对象
  // console.log(m1.address); //上海 此时this指的是实例化后的m1
 
  // ---- 测试方法 ----//
  // myObject.alertname(); //china,直接调用函数的类方法
  // m1.alertname(); //FF: m1.alertname is not a function, alertname 是myObject类的方法,和实例对象没有直接关系
  // m1.constructor.alertname(); //china, 调用该对象构造函数(类函数)的方法(函数)
  // m1.sayHello(); //hello everyone, myObject类的prototype原型下的方法将会被实例继承
  // myObject.sayHello(); //myObject.sayHello is not a function,sayHello是原型方法,不是类的方法
 
  // ---- 测试prototype ----//
  // console.log(m1.prototype); //undefined, 实例对象没有prototype
  // console.log(myObject.prototype); //Object 
  // alert(myObject.prototype.constructor); //console.log返回myObject(msg),此时alert()更清楚,相当于myObject

 //console.log(myObject.prototype.constructor.name); //china, 相当于myObject.name;

 

参考:

 

近年来发现有人对上图做了解释,分享:

 





本文转自豪情博客园博客,原文链接:http://www.cnblogs.com/jikey/archive/2011/05/13/2045005.html,如需转载请自行联系原作者

目录
相关文章
|
7月前
|
JavaScript
js开发:请解释什么是ES6的类(class),并说明它与传统构造函数的区别。
ES6的类提供了一种更简洁的面向对象编程方式,对比传统的构造函数,具有更好的可读性和可维护性。类使用`class`定义,`constructor`定义构造方法,`extends`实现继承,并可直接定义静态方法。示例展示了如何创建`Person`类、`Student`子类以及它们的方法调用。
90 2
|
7月前
|
JavaScript 前端开发
JavaScript中的正则表达式构造函数和正则表达式字面量
JavaScript中的正则表达式构造函数和正则表达式字面量
|
7月前
|
存储 JavaScript 前端开发
构造函数和原型的结合应用:轻松搞定JS的面向对象编程(三)
构造函数和原型的结合应用:轻松搞定JS的面向对象编程
|
7月前
|
设计模式 JavaScript 前端开发
构造函数和原型的结合应用:轻松搞定JS的面向对象编程(一)
构造函数和原型的结合应用:轻松搞定JS的面向对象编程
|
1月前
|
JavaScript 前端开发
JS中的构造函数的含义和用法
构造函数是JavaScript中用于创建新对象的特殊函数,通常首字母大写。通过`new`关键字调用构造函数,可以初始化具有相同属性和方法的对象实例,从而实现代码复用。例如,定义一个`Person`构造函数,可以通过传入不同的参数创建多个`Person`对象,每个对象都有自己的属性值。此外,构造函数还可以包含方法,使每个实例都能执行特定的操作。构造函数的静态属性仅能通过构造函数本身访问。ES6引入了`class`语法糖,简化了类的定义和实例化过程。
31 1
|
1月前
|
存储 前端开发 JavaScript
JavaScript常用的内置构造函数
JavaScript提供的内置构造函数在数据处理、对象创建、异常处理和异步操作等方面发挥了重要作用。掌握这些构造函数及其用法,对于开发高效、可靠的JavaScript应用至关重要。通过合理使用这些内置构造函数,开发者可以更好地管理和操作各种类型的数据,提升开发效率和代码质量。
26 1
|
6月前
|
设计模式 JavaScript 前端开发
在JavaScript中,继承是一个重要的概念,它允许我们基于现有的类(或构造函数)创建新的类
【6月更文挑战第15天】JavaScript继承促进代码复用与扩展,创建类层次结构,但过深的继承链导致复杂性增加,紧密耦合增加维护成本,单继承限制灵活性,方法覆盖可能隐藏父类功能,且可能影响性能。设计时需谨慎权衡并考虑使用组合等替代方案。
50 7
|
7月前
|
存储 JavaScript 前端开发
构造函数和原型的结合应用:轻松搞定JS的面向对象编程(二)
构造函数和原型的结合应用:轻松搞定JS的面向对象编程
|
3月前
|
JavaScript 前端开发
JavaScript基础知识-构造函数(也称为"类")定义
本文介绍了JavaScript中构造函数(也称为“类”)的定义和使用方法。
42 1
JavaScript基础知识-构造函数(也称为"类")定义
|
4月前
|
存储 JavaScript 前端开发
JavaScript引用数据类型和构造函数的秘密
JavaScript引用数据类型和构造函数的秘密