javascript构造器模式创建对象

  工厂模式创建对象,虽然符合正常思维。

  但由于对象在函数内部定义,故无法得知对象的类型(均为Object)。

  使用构造器模式,可以创建特定类型的函数实例:

  function Dog(age,size)
  {
    this.age=age;
    this.size=size;
    this.toAge=function(){
      alert(this.age);
    };
  }

  var dog1=new Dog(10,20);
  var dog2=new Dog(22,1);

  此时,上述函数可以认为是对象的构造函数。

  例子中,直接将属性赋值给了this对象,而创建对象的构造函数和构造器相同,例如:

  alert(dog1.constructor==Dog);//true

  那么,所创建的对象类型是什么呢?

  alert(dog1 instanceof Object);//true
  alert(dog1 instanceof Dog);//true

  对,构造函数可以将他的实例标识为一种特定的类型Dog类型。

  并且构造函数作为函数,当然可以单独调用:

//作为普通函数调用
  Dog(11,22);//添加到了window作用域
  window.toAge();//11
//在另外一个对象的作用域中调用
  var o ={};
  Dog.call(o,11,22);
  o.toAge();//11

  但是上述构造器,在生成实例时,实际操作如下代码:

  function Dog(age,size)
  {
    this.age=age;
    this.size=size;
    this.toAge= new Function("alert(this.age)");
  }

  显然,每一个实例都有一个Function实例。

  alert(dog1.toAge==dog2.toAge);//false

  因此我们可以将函数定义转移到构造器外部。

  function Dog(age,size)
  {
    this.age=age;
    this.size=size;
    this.toAge=toAge;
  }

  function toAge()
  {
    alert(this.age);
  }

  var dog1=new Dog(11,22);
  var dog2=new Dog(2,33);

  此时,减少了内存使用。但是,全局函数你懂的...

时间: 2024-11-06 14:22:49

javascript构造器模式创建对象的相关文章

Constructor JavaScript构造器模式。

构造器模式 : Constructor模式中, 通过在构造器前面加 new 关键字, 告诉JavaScript 像使用构造器一样实例化一个新对象,并且对象成员由该函数定义. 构造器内, 使用this 引用新创建的对象. JavaScript中有一个名为prototype的属性, 调用JavaScript构造器创建一个对象后,新对象就会具有构造器原型的所有属性. 设置属性: 1) 使用 .  2) 使用 [] 3) 使用Object.defineProperty 4) 使用Object.defin

javascript——工厂模式创建对象

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <meta http-equiv="Content-Type"

javascript组合模式创建对象

<script>     function Person(name, age) {         this.name = name;         this.age = age;         this.family = ["father" , "mather" , "sister"] ;     }     Person.prototype = {             constructor: Person,       

JavaScript设计模式一:工厂模式和构造器模式

转自:http://segmentfault.com/a/1190000002525792 什么是模式 前阵子准备期末考试,挺累也挺忙的,实在闲不得空来更新文章,今天和大家说说javascript中的设计模式. 首先呢,我们需要知道的是:模式是一种可复用的解决方案,而反模式呢就是针对某个问题的不良解决方案. js反模式常见例子 向setTimeout和setInterval传递字符串,而不是函数,这会触发eval()的内部使用. 在全局上下文中定义大量的变量污染全局命名空间 修改Object类的

javascript设计模式:构造器模式学习一

javascript 设计模式1.简介javascript是一种弱类型语言,不过类可以通过函数模拟出来最常见的实现方法如下:function Car(model){ this.model = model; this.color = "red"; this.year = "2012"; this.getInfo = function(){ return this.model + " " + this.year; }}接下来我们可以使用上边定义Car

【javascript设计模式】构造器模式、模块模式、单例模式

构造器模式(Constructor) 构造器模式是学习js最早接触的一种,实现主要如下: 1 function myObject(name){ 2 this.name = name; 3 } 4 5 myObect.propotype = function sayName(){ 6 alert(this.name); 7 } 使用的时候需要new一个对象. 1 var myObj = new myObject('hello'); 2 myObj.sayName(); 模块模式(Module) 模

JavaScript之面向对象学习六原型模式创建对象的问题,组合使用构造函数模式和原型模式创建对象

一.仔细分析前面的原型模式创建对象的方法,发现原型模式创建对象,也存在一些问题,如下: 1.它省略了为构造函数传递初始化参数这个环节,结果所有实例在默认的情况下都将取得相同的属性值,这还不是最大的问题! 2.最大的问题是原型中的所有属性是被很多实例所共享的,这种共享对于函数非常合适,对于那些包含基本值的属性也说得过去,因为我们知道可以在实例上添加一个同名属性,可以隐藏原型中的对应属性.但是对于包含应用类型值的属性来说,问题就非常严重了,代码如下: function Person(){ } Per

Javascript原型模式总结梳理

在大多数面向对象语言中,对象总是由类中实例化而来,类和对象的关系就像模具跟模件一样.Javascript中没有类的概念,就算ES6中引入的class也不过是一种语法糖,本质上还是利用原型实现.在原型编程语言中,类并不是必需的,对象不一定需要由类实例化而来,而是通过克隆另外一个对象来得到. 原型模式是用来创建对象的一种模式.在以类为中心的语言中,要创建一个对象首先要指定这个对象的类型,然后实例化一个对象.使用原型模式创建对象时不必关心对象的具体类型,而是找到一个对象,然后通过克隆来创建一个一模一样

javascript单体模式

单体模式的思想在于保证一个特定类仅有一个实例.这意味着当第二次使用同一个类创建的新对象的时候,应该得到与第一个所创建的对象完全相同. javacript中并没有类,因此对单体咬文嚼字的定义严格来说并没有意义.但是javascript具有new语法可使用构造函数来创建对象,而且有时需要使用这种语法的单体实现.这种思想在于当使用同一个构造函数以new操作符来创建多个对象时,应该仅获得指向完全相同的对象的新指针. 下面的代码显示了其预期行为: var nui = new Universe(); var