构造函数模式
来源:互联网 发布:mac照片导入iphone 编辑:程序博客网 时间:2024/06/05 07:36
在经典的面向对象编程语言中,构造函数是一种用于初始化新创建的对象并为之被分配内存的特殊方法。在JavaScript中,
一切都是对象,因此我们对对象的构造函数非常感兴趣。
对象的创建
在Javascript中,常见的三种创建对象的方法如下:
var newObject = {};// orvar newObject = Object.create( Object.prototype );// orvar newObject = new Object();
其中,最后一个例子中的Object构造函数为一个特定的值(或者空值)创建了一个object封装。它将会创建一个空的object,
然后返回。
然后有四个可以给一个对象分配键和值的方法:// 1. 点号语法 //设置属性 newObject.someKey = "Hello World"; //获取属性 var key = newObject.someKey; // 2. 方括号语法 //设置属性 newObject["someKey"] = "Hello World"; //获取属性 var key = newObject["someKey"]; // 3. Object.defineProperty //设置属性 Object.defineProperty( newObject, "someKey", {value: "for more control of the property's behavior",writable: true,enumerable: true,configurable: true}); //如果上面阅读起来有点困难,可以使用下面的简短方法var defineProp = function ( obj, key, value ){ config.value = value; Object.defineProperty( obj, key, config );};//使用var person = Object.create( null );//为person空对象分配属性defineProp( person, "car", "Delorean" );defineProp( person, "dateOfBirth", "1981" );defineProp( person, "hasBeard", false );// 4. Object.defineProperties // 设置属性 Object.defineProperties( newObject, { "someKey": { value: "Hello World", writable: true }, "anotherKey": { value: "Foo bar", writable: false } });//使用// Create a race car driver that inherits from the person objectvar driver = Object.create( person );
正如我们前面看到的,JavaScript不支持类的概念,但它支持处理对象的特殊构造器函数。通过加前缀关键字new
调用构造函数,我们可以告诉JavaScript我们想要该函数的行为如同一个构造函数,通过它来实例化一个有成员的新对象。
在构造函数中,关键字this指向新创建的对象:
function Car( model, year, miles ) { this.model = model; this.year = year; this.miles = miles; this.toString = function () { return this.model + " has done " + this.miles + " miles"; }; } // Usage: // We can create new instances of the car var civic = new Car( "Honda Civic", 2009, 20000 ); var mondeo = new Car( "Ford Mondeo", 2010, 5000 ); // and then open our browser console to view the // output of the toString() method being called on // these objects console.log( civic.toString() ); console.log( mondeo.toString() );
以上是一个构造函数模式的简单版本,却有一些问题。一个是继承困难,另一个是使用Car构造函数是,
函数tostring()在每一个对象中被重新定义。
解决方法:
构造函数加原型
在JavaScript中,函数有一个叫做原型的属性。当我们条用一个JavaScript构造函数创建对象时,构造函数的原型的
所有属性对这个新创建的对象可用。通过这种方式,可以创建多个car对象共同访问相同的原型。由此,我们可以将上面的原始例子
扩展:
function Car( model, year, miles ) { this.model = model; this.year = year; this.miles = miles; } Car.prototype.toString = function () { return this.model + " has done " + this.miles + " miles"; };
var civic = new Car( "Honda Civic", 2009, 20000 ); var mondeo = new Car( "Ford Mondeo", 2010, 5000 ); console.log( civic.toString() ); console.log( mondeo.toString() );
阅读全文
0 0
- 构造函数模式
- 构造函数模式
- 构造函数模式
- 构造函数模式
- 构造函数模式扩展
- 寄生构造函数模式
- JS构造函数设计模式
- JS设计模式之构造函数模式
- JS工厂模式(工厂函数)、构造函数模式
- 构造函数+原型模式构造js自定义对象
- JS中使用动态原型模式、寄生构造函数模式、稳妥构造函数模式创建对象
- 工厂模式、构造函数模式、原型模式范例
- 私有构造函数 单例模式
- js 构造函数与原型模式
- 私有构造函数 单例模式
- 私有构造函数 单例模式
- Javascript面向对象之构造函数模式
- 构造函数私有化---单例模式
- SDUT 1294
- ACE Editor在线代码编辑器简介及使用引导
- php 多进程实用小结
- Mac上Java开发环境配置
- JS变量的类型
- 构造函数模式
- 提高安卓系统启动速度之(1)-BLCR
- Spring 3.2.* MVC通过Ajax获取JSON数据报406错误
- Qt 之 QSqlRecord Class
- SynchronizedMap和ConcurrentHashMap的深入分析
- LoadRunner视频教程
- opencv: 阈值处理(cv2.threshold) 探究(图示+源码)
- Nt32 build run之后总是找不到网卡
- 将entity内String类型返回值为null更改为""