Javascript我学之六对象工厂函数与构造函数

本文是金旭亮老师网易云课堂的课程笔记,记录下来,以供备忘。

概述

  • 使用对象字面量,或者向空对象中动态地添加新成员,是最简单易用的对象创建方法。
  • 然而,除了这两种常用的对象创建方式,JavaScript还提供了其他方法创建对象。

1).使用工厂函数创建对象

我们可以编写一个函数,此函数的功能就是创建对象,可将其称为“对象工厂方法”。

 1    //工厂函数
 2         function createPerson(name, age, job) {
 3             var o = new Object();
 4             o.name = name;
 5             o.age = age;
 6             o.job = job;
 7             o.sayName = function () {
 8                 console.info(this.name);
 9             };
10             return o;
11         }
12         //使用工厂函数创建对象
13         var person1 = createPerson(‘张三‘, 29, ‘软件工程师‘);
14         var person2 = createPerson(‘李四‘, 40, ‘医生‘);

2).定义对象构造函数

a).对象构造函数首字母大写

b).内部使用this关键字给对象添加成员

c).使用new关键字调用对象构造函数

       //定义对象“构造”函数
        function Person(name, age, job) {
            this.name = name;
            this.age = age;
            this.job = job;
            this.sayName = function () {
                console.info(this.name);
            };
        }
        //使用new调用对象构造函数创建对象
        var p1 = new Person(‘张三‘, 29, ‘软件工程师‘);
        var p2 = new Person(‘李四‘, 40, ‘医生‘);

以普通方式调用的“构造函数”

构造函数其实也是一个函数,不同之处在于调用它时必须要加一个“new”关键字,如果不加这个关键字,则对它的调用被认为是普通函数调用。

1        //作为普通函数调用的构造函数,通过this添加的属性,
2         //成为了window对象的属性与方法。
3         console.info(window.name);//张三
4         console.info(window.age); //29
5         console.info(window.job); //软件工程师

对象构造函数长得这个样:

1 function Person (name) {
2      this.name = name;
3      this.say = function () {
4          return "I am " + this.name;
5      };
6 }

实际上是这样(示意):

1 function Person (name) {
2       // var this = {};
3       this.name = name;
4       this.say = function () {
5            return "I am " + this.name;
6      };
7       // return this;
8 }

构造函数完成的工作

1. 创建一个新的对象

2. 让构造函数的this引用这一新创建的对象

3. 执行构造函数中的代码,这些代码通常完成向新对象添加属性的工作

4. 向外界返回新创建的对象引用。

对象构造函数与对象工厂方法的区别


1. 对象构造函数中没有显式的对象创建代码

2. 新对象应具备的属性与方法是通过this引用添加的.

3. 对象构造函数中没有return语句

通常会把对象构造函数的首字母设置为大写的,以区别于普通函数。

对象的constructor属性

a).使用对象工厂函数创建对象,每个对象的constructor属性引用Object()

1       var person = createPerson(‘张三‘, 29, ‘软件工程师‘);
2
3      //使用工厂方法创建对象,其constructor属性引用Object()函数
4         console.info(person1.constructor === Object);  //true

b).使用对象构造函数创建对象,每个对象的constructor属性引用这个构造函数

1 var p = new Person(‘张三‘, 29, ‘软件工程师‘);
2 //使用对象构造函数创建对象,
3 //每个对象的constructor属性,引用这个构造函数
4 console.info(p.constructor === Person); //true

如何避免“忘记”new?

可以使用arguments.callee解决这个问题

 1         //了解arguments.callee的作用
 2         function TestArgumentsCallee() {
 3             console.info(this);
 4             console.info(this instanceof TestArgumentsCallee);
 5             console.info(this instanceof arguments.callee);
 6         };
 7         TestArgumentsCallee(); //window
 8                                             //false
 9                                             //false
10         new TestArgumentsCallee();  //TestArgumentsCallee
11                                                      //true
12                                                      //true

于是,可以直接用arguments.callee

 1         //避免忘记new
 2         function MyObject(value) {
 3             if (!(this instanceof arguments.callee)) {
 4                 //如果调用者忘记加上new了,就加上new再调用一次
 5                 return new MyObject(value);
 6             }
 7             this.prop = value;
 8         }
 9         //测试
10         var obj1 = new MyObject(100);
11         console.info(obj1.prop);//100
12         var obj2 = MyObject(200);
13         console.info(obj2.prop); //200
时间: 2024-10-17 19:10:17

Javascript我学之六对象工厂函数与构造函数的相关文章

对象工厂函数与构造函数

本文内容: 1.概述 2.使用工厂函数创建对象 3.定义对象“构造”函数 4.对象的constructor属性 5.以普通方式调用的对象“构造”函数 ★概述: 使用对象字面量,或者向空对象中动态地添加新成员,是最简单易用的对象创建方法.然而,除了这两种常用的对象创建方式,JavaScript还提供了其他方法创建对象. ★使用工厂函数创建对象 我们可以编写一个函数,此函数的功能就是创建对象,可以将其称为“对象工厂方法”. ★ 定义对象“构造”函数 注意点:对象构造函数首字母大写:内部使用this关

Javascript我学之五对象的创建与使用

本文是金旭亮老师网易云课堂的课程笔记,记录下来,以供备忘. 对象的创建 JavaScript对象有两种类型 1).Native:在ECMAScript标准中定义和描述,包括JavaScript内置对象(数组,日期对象等)和用户自定义对象. 2).Host:在主机环境(如浏览器)中实现并提供给开发者使用,比如windows对象和所有的DOM对象 对象的含义 Object is an unordered collection of properties each of which contains

javascript 对象 工厂方式和构造函数

1.一个简单的代码 function s(names){this.name=names;this.showname=functoin(){ alert(this.name);}} //工厂方式 new s("张三").showname(); // 函数中 'this' 的理解 2. 面向对象的定义.特点. 对象原型prototype

JavaScript基础知识(对象、函数与对象)

17.对象 属性:描述对象的信息  方法:描述对象的行为  封装:只关心输入和输出(不管过程如何实现) ü 对象的分类: 内置对象(原生对象): 就是JavaScript语言预定义的对象(如String/Number). 宿主对象: 一般由浏览器环境提供实现,主要分为 BOM 和 DOM. 自定义对象: 就是由开发人员自主创建的对象. ü 对象的创建: ? 初始化器方式 var 对象名 = {         属性名 : 属性值 ,         方法名 : function( ){方法体} 

javascript工厂函数(factory function)vs构造函数(constructor function)

如果你从其他语言转到javascript语言的开发,你会发现有很多让你晕掉的术语,其中工厂函数(factory function)和构造函数(constructor function)就是其中的一个.本文试图理顺这两者之间的区别. Factory functions 工厂函数是将返回一个新的object的任何不是类或者构造函数的函数.在js中,任何函数都能够返回一个object.如果我们不是通过new function()的方式来获得这个对象的,那么她就是一个factory工厂函数. funct

javascript学习笔记---ECMAScriptECMAScript 对象----定义类或对象

使用预定义对象只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象. ECMAScript 拥有很多创建对象或类的方法. 原始的方式 因为对象的属性可以在对象创建后动态定义(后绑定),类似下面的代码: var oCar = new Object; oCar.color = "blue"; oCar.doors = 4; oCar.mpg = 25; oCar.showColor = function() { alert(this.color); };不过这里有一

用工厂函数封装对象

工厂函数是在方法中建立一个Object空对象,然后再对此对象添加属性和方法,然后把Object对象返回 <html> <head> <title>工厂函数封装对象</title> <script type="text/javascript"> // 工厂函数模式封装对象 //特点:返回结果为对象的函数,在用工厂函数创建对象的时候,一定要new function fn(nianling){ var obj=new object(

JavaScript进阶系列03,通过硬编码、工厂模式、构造函数创建JavaScript对象

本篇体验通过硬编码.工厂模式.构造函数来创建JavaScript对象. □ 通过硬编码创建JavaScript对象 当需要创建一个JavaScript对象时,我们可能这样写: var person = { firstName: "Darren", lastName: "Ji", getFullName: function() { return this.firstName + " " + this.lastName; } }; 如果需要创建2个结

JavaScript中的构造函数和工厂函数

JavaScript中的工厂函数 1 function crateHero (name,blood,weapoon) { 2 var o = new Object(); 3 o.name = name; 4 o.blood = blood; 5 o.weapoon = weapoon; 6 o.attch = function () { 7 console.log(this.name+"用"+this.weapoon+"进行了攻击"); 8 } 9 return o