定义:在JavaScript中,用new关键字来调用的函数,称为构造函数,构造函数首字母一般大写。

理解:

构造函数就是初始化一个实例对象,对象的prototype属性是继承一个实例对象。

创建对象,并调用函数,new fn,无参;

创建对象,并调用函数,new fn(),带参;

在构造函数中显示调用return,如果返回的值是一个对象,它会代替新创建的对象实例返回。如果返回的值是一个原始类型,它会被忽略,新创建的实例会被返回。

看例子!

        function Person(name, age) {
this.name = name;
this.age = age;
}
var p1 = new Person('lili',10);
console.log(p1);

打印结果:

Person {name: 'lili', age: 10}

创建带参无参对象及调用函数:

        function fn(a) {
this.a = a;
this.b = 20;
return "hello";
} var re = new fn;  //构造函数
console.log(re); var re2 = new fn(200);  //构造函数
console.log(re2); var re3 = fn(90);  //普通函数调用
console.log(re3);

打印结果:

fn {a: undefined, b: 20}
fn {a: 200, b: 20}
hello

理解:

首先定义变量提升;re是创建了一个新对象,并调用了不带参数的函数fn;re2也是创建了一个新对象,并传入参数,隐式操作是var a = 200,并调用函数;re3是函数调用,并传入参数 a = 90。

例:

        function fn() {
this.name = "karen";
return function fm() {
console.log("fm运行了");
this.name = "jack";
}
}
var f1=new fn();
console.log(f1);
console.log(f1.name); //"fm"

理解:f1的结果看fn函数的返回值是不是引用数据,如果是,则返回哪个引用数据,此时是一个fm函数,如果不是一个对象,那么

就返回新创建的对象。

例:

        function fn() {
this.name = "marry";
var obj = {
name: "karen",
fm: function () {
this.name = "jack"
}
}
return obj;
} var f1 = new fn();
console.log(f1.name); //karen var f2 = new((new fn()).fm)();
console.log(f2.name); //jack var f3 = new fn();
var f4 = new(f3.fm)();
console.log(f3.name, f4.name); //karen,jack

理解:

f2:首先new fn()创建一个对象,再调用,返回一个obj对象,再引用成员fm,并创建一个新的对象,再调用name,因此打印jack。

f3和f4是f2拆分的结果,应该能理解。

JS:构造函数的更多相关文章

  1. JS构造函数的用法和JS原型

    $(function(){ var rec = new Rectangle(5, 10); //alert(rec.width + "*" + rec.height + " ...

  2. 谈谈JS构造函数

    //构造函数 //使自己的对象多次复制,同时实例根据设置的访问等级可以访问其内部的属性和方法 //当对象被实例化后,构造函数会立即执行它所包含的任何代码 function myObject(msg) ...

  3. Class和普通js构造函数的区别

    Class 在语法上更加贴合面向对象的写法 Class 实现继承更加易读.易理解 更易于写 java 等后端语言的使用 本质还是语法糖,使用 prototype Class语法 typeof Math ...

  4. js 构造函数 & 静态方法 & 原型 & 实例方法

    js 构造函数 & 静态方法 & 原型 & 实例方法 ES5 "use strict"; /** * * @author xgqfrms * @licens ...

  5. 深入研究js构造函数和原型

    很快就要从新浪离职了,最近心情比较轻松,抽点空整理一下构造函数和原型的机理. 我们都知道,在经典设计模式中我们最常用的就是工厂模式.构造函数模式.原型模式这几种,听起来‘模式’好像很高大上的样子,实际 ...

  6. js构造函数,索引数组和属性的属性

    本文主要介绍和小结js的构造函数,关联数组的实现方式和使用,及不可变对象和它的实现方式及他们使用过程中要注意的点 <script> function p(){ var len=argume ...

  7. JS构造函数原理与原型

    1.创建对象有以下几种方式: ①.var obj = {}; ②.var obj = new Object(); ③.自定义构造函数,然后使用构造函数创建对象 [构造函数和普通函数的区别:函数名遵循大 ...

  8. js 构造函数(construction)与原型(prototype)

    1.面向对象:js原型 java有class和instance,js仅仅有构造函数(function Cat(name,age){this.name=name;this.age=age}),为了实现数 ...

  9. JS构造函数、对象工厂、原型模式

    1.对象创建的3中方法 1.1.对象字面量 var obj = { name: "mingzi", work: function () { console.log("wo ...

  10. 完整原型链详细图解之JS构造函数、原型 原型链、实例化对象

    一.首先说一下什么是构造函数: 构造函数:用来在创建对象时初始化对象.特点:构造函数名一般为大写字母开头:与new运算符一起使用来实例化对象. 举例: function Person(){} //Pe ...

随机推荐

  1. 帝国CMS内容页模板过滤清理简介smalltext前后空格的方法!

    在内容模板你需要调用的地方使用如下代码输出简介即可过滤简介smalltext前后的空格了: <? $qian=array(" "," ","\t ...

  2. Prometheus介绍及docker安装方式

    一.介绍 Prometheus是主要基于Go编写,最初在SoundCloud上构建的开源系统监视和警报工具包,它启发于 Google 的 borgmon 监控系统,由工作在 SoundCloud 的 ...

  3. 五分钟搭建博客系统 OK?

    前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 概要: 通过 Docker Compose 在使用Docker容器构建的隔离环境中轻松运行 WordPress.在开始之前,请确保已安 ...

  4. Java语言学习day19--7月25日

    今日内容介绍1.继承2.抽象类3.综合案例---员工类系列定义 ###01继承的概述 *A:继承的概念 *a:继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系 *b:在Jav ...

  5. 2021.11.09 P4824 [USACO15FEB]Censoring S与P3121 [USACO15FEB]Censoring G(KMP&&AC自动机)

    2021.11.09 P4824 [USACO15FEB]Censoring S与P3121 [USACO15FEB]Censoring G(KMP&&AC自动机) https://w ...

  6. Restful API和传统的API的区别

    一.功能区别 Restful API是当作资源的唯一标识符,而传统是实现某某功能 如:/api/getList/1 and /api/getList?page=1 二.methods多样性 Restf ...

  7. 基础的CSS描绘测试

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  8. 【科普】为什么ip地址通常以192.168开头?

    开源Linux 回复"读书",挑选书籍资料~ 我们做运维的,与ip地址接触最多,无论是运维的哪方面,都需要跟ip地址打交道,通常我们也会经常听到公网.内网?那什么是公网ip地址呢? ...

  9. 专门为小白准备的入门级mybatis-plus-generator代码自动生成器,提高开发效率。值得收藏

    引入依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-g ...

  10. 637. Average of Levels in Binary Tree - LeetCode

    Question 637. Average of Levels in Binary Tree Solution 思路:定义一个map,层数作为key,value保存每层的元素个数和所有元素的和,遍历这 ...