JavaScript 创建对象--构造函数模式
来源:互联网 发布:seo实战密码百度云 编辑:程序博客网 时间:2024/06/06 08:38
构造函数模式:
ECMAScript中的构造函数可以用来创建特定类型的对象,也可以创建
自定义的构造函数,从而自定义对象类型的属性和方法。参考例2:
例2:
function Person(name,age){
this.name=name;
this.age=age;
this.getName=function(){
alert(this.name);
}
}
var person1=new Person("Tim",35);
var person2=new Person("Bob",40);
person1.getName(); //Tim
person2.getName();//Bob
alert(person1); //Object
alert(person2);//Object
alert(person1 instanceof Person); //true,person1是Person的一个实例
alert(person2 instanceof Person);//true,person2是Person的一个实例
alert(person1.constructor == Person);//true,person1有一个构造函数属性,指向Person
alert(person2.constructor == Person);//true,person1有一个构造函数属性,指向Person
将例2的代码与之前的构造函数的相比较,可以发现以下几点不同:
(1)没有显示的创建对象;
(2)直接将属性和方法赋值给this对象;
(3)没有return语句。
按照惯例:构造函数始终应该以一个大写字母开头,而非构造函数应该以一个小写
字母开头。
对于上面的例2,可以发现:要创建Person的新实例,必须使用new操作符。其创建
的主要步骤为:
(1)创建一个新对象;
(2)将构造函数的作用域赋给新对象(此时this指向的是这个新对象)
(3)执行构造函数中的代码;
(4)返回新对象。
构造函数胜过工厂模式的地方在于:构造函数的实例除了是对象之外,还是一种特殊
的构造函数类型(可使用instanceof进行验证)。
构造函数的缺点:
使用构造函数的主要问题,就是每个方法都要在每个实例上重新创建一遍。对于例2而言,
添加如下代码:
代码2: alert(person1.getName==person2.getName);//false
通过之前的了解,对象的方法可以类比为一个指针,指向内存中特定区域的函数,由代码2,
可以发现:即是是由同一个构造函数所创建的实例,他们的方法都会被重新创建,而不管
该方法是否完成同样的功能。
对于代码2,我们可以尝试做如下的修改:
代码3:
function Person(name,age){
this.name=name;
this.age=age;
this.getName=getName;
}
function getName(){
alert(this.name);}
var person1=new Person("Tim",35);
var person2=new Person("Bob",40);person1.getName();//Tim
person2.getName();//Bobalert(person1.getName==person2.getName);//true
若将方法定义在函数外,即是定义为一个全局函数,因为函数是对象,函数名是指针,
此时通过构造函数创建的两个实例的方法是相同的。但又带来了一个更现实的问题:如果
构造函数要定义很多方法,那么使用上述方法就需要创建更多的全局函数,那这个构造函
数就毫无封装性可言。
此时我们可以考虑运用原型模式来解决这个问题。
- JavaScript 创建对象--构造函数模式
- JavaScript 创建对象---寄生构造函数模式
- JavaScript 创建对象---稳妥构造函数模式
- JavaScript构造函数创建对象
- JavaScript 创建对象 构造函数
- JavaScript创建对象之寄生构造函数模式(六)
- JavaScript创建对象之稳妥构造函数模式(七)
- JavaScript构造函数及原型对象 使用Object或对象字面量创建对象 工厂模式创建对象 构造函数模式创建对象 原型模式创建对象 构造与原型混合模式创建对象
- JavaScript面向对象(2)——创建对象的工厂模式与构造函数模式
- 使用构造函数创建JavaScript对象,创建JavaScript对象
- JavaScript中创建对象的方法:工厂模式,构造函数模式, 原型模式
- Javascript之创建对象(工厂模式与构造函数模式)
- Javascript---字面量创建对象、组合构造函数+原型模式、动态原型模式
- javascript中组合使用构造函数模式和原型模式创建对象
- JavaScript 创建对象--组合使用构造函数模式和原型模式
- 创建对象之构造函数模式
- Javascript面向对象之构造函数模式
- javascript (对象定义) 构造函数模式
- 解决spring-boot项目中无法读取yml配置文件属性问题
- 如何将本地项目上传到Github
- window使用之子窗口引用父窗口对象
- 增加根节点
- 初试TensorFlow之安装Linux虚拟机
- JavaScript 创建对象--构造函数模式
- MySQL数据库的发展史
- Win7下eclipse luna配置storm1.1.0开发环境并跑中文WordCount
- Flynn初探:基于Docker的PaaS平台
- Java Web应用
- c#-Enum枚举
- 【观察】智能物联网时代的新价值观 联想开放赋能释放生态之力
- 基于S3C6410的DDR初始化
- abstract class和interface的区别