定义:在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. Dart语言基础

    文章目录 前言:dart语言简介 一.变量 1.1.类型推导 1.2.默认值 1.3.Final 和 const修饰符 二.内建类型 2.1.数据类型 2.2.集合的相关操作 三.函数 3.1.函数的 ...

  2. LinkedList实现

    LinkedList源码实现: public class LinkedList<E> { private class Node{ public E e; public Node next; ...

  3. PostgreSQL常用初级技能树

    1.创建表需要id自增 设置serial即可,示例: id serial not null 2.创建表没有设置后面想要再设置自增 给test表设置一个自增序列test_id_seq CREATE SE ...

  4. 【分享汇总】25个主题分享,360°领略OpenHarmony最新技术版图

    2021年10月,开放原子开源基金会旗下开源项目 OpenAtom OpenHarmony (以下简称"OpenHarmony") 应邀参加华为2021 HDC 开发者大会,并组织 ...

  5. 关于Vue.cli 脚手架环境中引入Bootstrap时,table表格样式缺失的解决办法

    Vue+bootstrap不能正常使用table的样式 环境:下载官网的本地bootstrap包,然后在vue 的index.html引入bootstrap的css和js环境 问题描述:1. vue里 ...

  6. Java语言学习day38--8月13日

    ###11哈希表的数据结构 A:哈希表的数据结构:(参见图解) 加载因子:表中填入的记录数/哈希表的长度 例如: 加载因子是0.75 代表: 数组中的16个位置,其中存入16*0.75=12个元素 如 ...

  7. B3log开源博客compose搭建

    B3log开源博客搭建 docker 安装 yum install docker-ce-17.12.1.ce docker-compose 安装 curl -L https://github.com/ ...

  8. 【GPLT】 集合相似度(c++)

    题目如下: 这题主要用来练习stl的使用,是一道比较简单的题目 AC代码如下 #include<iostream> #include<cmath> #include<ma ...

  9. K8s 如何提供更高效稳定的编排能力?K8s Watch 实现机制浅析

    关于我们 更多关于云原生的案例和知识,可关注同名[腾讯云原生]公众号~ 福利: ①公众号后台回复[手册],可获得<腾讯云原生路线图手册>&<腾讯云原生最佳实践>~ ②公 ...

  10. DDoS攻击--Syn_Flood攻击防护详解(TCP)

    https://blog.csdn.net/qq_34777600/article/details/81946514