javascript创建对象之构造函数模式(二)

对上一章节的工厂模式进行代码重写

function Human(name, sex) {
            this.name = name;
            this.sex = sex;
            this.say = function () {
                alert(this.name);
            }
        }
        var man = new Human("汉武大帝", "男");
        var woman = new Human("王母娘娘","女");

到Human没有.他的第一个字母大写了.这是一种语法约定.构造函数始终应该以一个大写字母开头,而非构造函数则以一个小写字母开头,用于区分构造函数和非构造函数.

要创建Human的实例,必须使用new操作符.这就会出现以下四个步骤:

1.创建一个新对象或变量.

2.将构造函数的作用域赋值给新变量或新对象.

3.执行构造函数中的代码

4.返回新对象.

 

1 alert(man instanceof Object);//true
2 alert(man instanceof Human); //true
3 alert(woman instanceof Object); //true
4 alert(woman instanceof Human); //true

这里的true很好的说明了:创建自定义的构造函数意味着将来可以将他的实例表示为一种特定的类型.而这正是构造韩式模式优于工厂模式的地方.

尽管如此,构造函数还是有自己的一些缺陷,或者说不足吧.

在man和woman中都有一个名为say()的方法,他们的功能一模一样.但是这两个方法却不是同一个Function()实例创建出来的.

1 function Human(name, sex) {
2             this.name = name;
3             this.sex = sex;
4             this.say = new Function("alert(this.name);");
5         }

这就意味着如果需要n个实例,就要创建n个say的Function()实例.这样还是会造成资源的浪费.

继续对上面的代码经行优化,让这个say()方法只创建一次.共用一个引用.

function Human(name, sex) {
            this.name = name;
            this.sex = sex;
            this.say = say;
        }
        function say() {
            alert(this.name);
        }

因为say包含一个指向函数的指针,因此Human的实例就共享了全局作用域中的同一个say()函数.但这个无法让人接受,

因为如果系统比较庞大的话,就会出现很多全局变量,一不小心就会有被改掉的危险.而我们封装的对象就没有封装性可言了.

接着就又有了原型模式了.下一章在接着说原型模式.

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索实例
, 函数
, 非全局函数
, this
, 模式
, name
, 一个
构造函数模式
构造函数创建对象、js构造函数创建对象、java构造函数创建对象、javascript 创建对象、javascript 构造函数,以便于您获取更多的相关知识。

时间: 2024-07-31 05:55:18

javascript创建对象之构造函数模式(二)的相关文章

javascript组合使用构造函数模式和原型模式实例

  本文实例讲述了javascript组合使用构造函数模式和原型模式的方法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 function testPrototype2(){ function Person3(name, age, job){ this.name=name; this.age=age; this.job=job; this.friends =["shelb", "

javascript组合使用构造函数模式和原型模式实例_javascript技巧

本文实例讲述了javascript组合使用构造函数模式和原型模式的方法.分享给大家供大家参考.具体如下: function testPrototype2(){ function Person3(name, age, job){ this.name=name; this.age=age; this.job=job; this.friends =["shelb", "court"]; } Person3.prototype = { constructor:Person3

javascript创建对象之工厂模式(一)

工厂模式在软件工程里面是一种比较常见的设计模式了.这种模式抽象了创建具体对象的过程. 上代码: function createHuman(name,sex) {             var obj = new Object();             obj.name = name;             obj.sex = sex;             obj.say = function () {                 alert(this.name);        

javascript创建对象之原型模式(三)

先上代码: function Human() { }         Human.prototype.name = "成吉思汗";         Human.prototype.sex = "男";         Human.prototype.say = function () {             alert(this.name);         }         var man = new Human();         man.say();

javascript创建对象之动态原型模式(五)

动态原型模式是将所有的信息都封装到工造函数中,而构造函数中初始化原型,有保持了同时在使用构造函数和原型的优点. function Human(name, sex) {             this.name = name;             this.sex = sex;             if (typeof this.say != "function") {                 Human.prototype.say = function () {   

深入理解JavaScript系列(26):设计模式之构造函数模式详解

 这篇文章主要介绍了深入理解JavaScript系列(26):设计模式之构造函数模式详解,本文讲解了基本用法.构造函数与原型.只能用new吗?.强制使用new.原始包装函数等内容,需要的朋友可以参考下     介绍 构造函数大家都很熟悉了,不过如果你是新手,还是有必要来了解一下什么叫构造函数的.构造函数用于创建特定类型的对象--不仅声明了使用的对象,构造函数还可以接受参数以便第一次创建对象的时候设置对象的成员值.你可以自定义自己的构造函数,然后在里面声明自定义类型对象的属性或方法. 基本用法 在

js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)_javascript技巧

在上篇文章给大家介绍了javascript面向对象基础,本篇文章继续深入学习javascript面向对象,JS的语法非常灵活,简单的对象创建就有好几种不同的方法.这些过于灵活的地方有时候确实很让人迷惑,那么今天我们就来梳理一下JS中常用的创建对象的几种方法吧. 前言 虽然使用 Object构造函数 或者使用 对象字面量 可以很方便的用来创建一个对象,但这种方式有一个明显的缺点:使用一个接口创建多个对象会产生很多冗余的代码.因此为了解决这个问题,人们开始使用以下几种方式来常见对象. 工厂模式 该模

浅析在javascript中创建对象的各种模式_javascript技巧

最近在看<javascript高级程序设计>(第二版) javascript中对象的创建 •工厂模式 •构造函数模式 •原型模式 •结合构造函数和原型模式 •原型动态模式 面向对象的语言大都有一个类的概念,通过类可以创建多个具有相同方法和属性的对象.虽然从技术上讲,javascript是一门面向对象的语言,但是javascript没有类的概念,一切都是对象.任意一个对象都是某种引用类型的实例,都是通过已有的引用类型创建:引用类型可以是原生的,也可以是自定义的.原生的引用类型有:Object.A

在javascript中创建对象的各种模式解析_基础知识

最近在看<javascript高级程序设计>(第二版) javascript中对象的创建 •工厂模式 •构造函数模式 •原型模式 •结合构造函数和原型模式 •原型动态模式 面向对象的语言大都有一个类的概念,通过类可以创建多个具有相同方法和属性的对象.虽然从技术上讲,javascript是一门面向对象的语言,但是javascript没有类的概念,一切都是对象.任意一个对象都是某种引用类型的实例,都是通过已有的引用类型创建:引用类型可以是原生的,也可以是自定义的.原生的引用类型有:Object.A