构造函数

学会使用高级函数的安全类型检测

霸气de小男生 提交于 2020-03-22 13:37:49
js内置的类型检测机制并非完全可靠,比如typeof操作符,safari直到第四版在对正则表达式应用typeof操作符时会返回function,因此很难确定某个值到底是不是函数。 再比如instanceof操作符在在存在多个全局作用域(像一个页面包含多个frame)也是问题多多。比如 let isArray = value instanceof Array; 以上代码要返回true,value必须是一个数组,而且必须和Array构造函数在同个全剧作用域中。(别忘了,Array是window的属性。)如果value是在另个frame中定义的数组,那么以上代码就会返回false。 解决上述问题的方法都一样。大家都知道,在任何值上调用Object原生的toString() 方法,都会返回一个[object NativeConstructorName]格式的字符串。每个类在内部都有一个[[class]]属性。在这个属性中就指定了上述字符串中的构造函数名。 alert(Object.prototype.toString.call(value)); //[object Array] 由于原生数组的构造函数名与全剧作用域无关,因此使用toString()能保证返回一致的值。 function isArray(value) { return Object.prototype.toString

Javascript高级编程学习笔记(17)—— 引用类型(6)基本包装类

♀尐吖头ヾ 提交于 2020-03-22 09:41:55
基本包装类 基本包装类这个概念或许有的小伙伴没有听说过 但是小伙伴们有没有想过,为什么基本数据类型的实例也有方法呢? 其实这些方法都来自基本包装类型 这是JS为了方便操作基础数据类型而创建的特殊引用类型 基本包装类有三种 1. Boolean类型 2. Number类型 3. String类型 执行过程 这三种基本包装类型的生命周期很短,只存在于代码执行的一瞬间 当这三种基本数据类型调用其基本包装类的方法时: 1.读取以上三种类型的基本数据类型时 2.创建一个基本包装类的实例 3.调用该实例上的方法,调用完成后销毁该实例 注意事项 1.不要显示地调用基本包装类的构造函数构建实例,因为很容易和基础数据类型混淆 2.对基本包装类调用 typeof 时返回 object 3.使用 Object 构造函数时,如参数传入三种基本类型则会返回一个该基础类型对应的基本包装类的实例 4.基本包装类,和同名的转型函数是有区别的,转型函数返回的是基础类型的值,基本包装类返回的是该值的实例 原理 在前面的文章中,我介绍了JS中没有重载,那么Number函数是怎么同时实现转型函数,以及基本包装类型的呢? 难道是 Number 的实现就是底层语言实现的重载吗? 答案显然不是 这里就涉及到 new 操作符的实现原理 new 操作符主要步骤是: 1.创建一个新的对象 2.将构造函数的执行环境设置为这个新对象

javascript对象---10 继承

不羁的心 提交于 2020-03-22 08:54:45
3 月,跳不动了?>>> 一、继承的概念 继承是面向对象的重要特征。继承是指子类对象拥有父类对象的属性与方法,同时子类对象可以覆盖扩展父类对象的属性和方法。 JS中继承的特点: 1.子类对象 拥有 父类对象 的 属性和方法; (把构造函数称为一个类,使用构造函数为当前对象初始化属性) 2.子类对象可以有自己的新属性和方法; 3.子类对象可以重写父类对象的方法; 4.JS中并没有专门的继承语法,但可以通过原型链机制实现。 把共有的属性封装在父类,子类继承 继承的优点 1.提供了一种优良的代码组合方式,提高了代码的重用性。 2.子类可以灵活调用父类的属性,同时可以扩展覆盖父类的属性,体现灵活性。 3.提供了代码的可维护性 二、原型继承方式 原型继承方式:通过原型链完成继承。任何对象都会通过原型链继承Oject函数的 prototype对象中的属性和方法 正常声明两个构造函数 ---人类 和学生 //人类 : 性别年龄-说话、跑跳 //人类中包括学生 --有学校 考试 //注意父类并不是专门为子类服务的,父类也会有相关的事例 function Person(name,age){ this.name = name; this.age = age; } Person.prototype.sayHello = function(){ console.log("名字:" +this.name);

C#单例模式

南楼画角 提交于 2020-03-22 00:02:47
1、定义 单例模式是确保一个类只有一个实例,并提供一个全局访问方式的设计方法 2、UML类图 3、应用场景 需要频繁实例化然后销毁的对象。 创建对象时耗时过多或者耗资源过多,但又经常用到的对象。 有状态的工具类对象。 频繁访问数据库或文件的对象。 4、C#实现单例模式 4.1 单线程单例模式 代码解析: Singleton的构造函数必须是私有的,确保外层无法通过new进行实例化对象 静态变量的生命周期同应用程序的生命周期相同,可以定义一个私有的全局静态变量_instance来保存该类的唯一实例 提供一个可访问的静态方法访问类的实例,在该方法内通过判断_instance是否为null,如果是null就创建一个实例,否则向外部返回实例 4.2 多线程单例模式 1) lock方式 代码解析: 外层if判断_instance不为null时,直接返回实例,避免每次获取实例时进行锁定,节省了 性能损耗 当外层判断成功时,使用lock锁定,保证只创建一个实例 2) 静态构造函数 代码解析: 静态构造函数只会执行一次 3) 静态变量初始化 代码解析: 静态变量在初次运行时就会初始化,readonly确保变量运行时无法修改 来源: https://www.cnblogs.com/kun2008/p/6686362.html

ASP.NET Core笔记(1)

我们两清 提交于 2020-03-21 22:23:59
3 月,跳不动了?>>> Startup构造函数 ConfigureServices方法 Configure方法 在ConfigureWebHostDefaults中直接配置服务和请求管道 ASP.NET Core一般使用Startup类来进行应用的配置。在构建应用主机时指定Startup类,通常通过在主机生成器上调用WebHostBuilderExtensions.UseStartup<TStartup> 方法来指定 Startup类: public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); Startup类中可以包含以下方法: Startup构造函数 ConfigureServices方法,可选 Configure方法 Startup构造函数 在3.1中,使用泛型主机 (IHostBuilder) 时,Startup构造函数中只能注入这三种类型的服务:IWebHostEnvironment、IHostEnvironment、IConfiguration。

JavaScript创建对象的几种模式

断了今生、忘了曾经 提交于 2020-03-21 15:41:30
工厂模式    构造函数模式 问题:方法也变成多份。若把方法移到对象定义的外部。则破坏了封装性    原型模式  问题:原型中的引用对象会变成单份。被所有实例共享。      用delete关键字来删除对象实例中的值   hasOwnProperty() 对象实例中存在值,返回true   in关键字 是否可以访问到属性   hasPrototypeProperty()  是否有原型属性   对象的key方法。获取key的属性 组合构造模式和原型模式  最常用的模式      在构造函数中定义属性。在原型中定义方法 动态原型模式   在构造函数中,创建原型方法之前,先检测是否存在 寄生构造函数模式     与工厂方法一样 稳妥构造函数模式   对象实例中的属性。只能通过方法来访问    来源: https://www.cnblogs.com/amibandoufu/p/4956493.html

第七章 函数表达式

久未见 提交于 2020-03-21 07:41:56
7.4 私有变量 任意在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量。私有变量包括函数的参数、局部变量和在函数内部定义的其他函数 function add(num1,num2){ var sum=num1+num2; return sum; } 在add函数内部,有3个私有变量:num1、num2和sum。在函数内部可以访问这几个变量,但在函数外部则不能访问它们。如果在这个函数内部创建一个闭包,那么闭包通过自己的作用域链可以访问这些变量。利用这一点,就可以创建用于访问私有变量的公有方法。 我们把有权访问私有变量和私有函数的公有方法称为特权方法。有两种在对象上创建特权方法的方式。第一种是在构造函数的中定义特权方法,基本模式如下: function MyObject(){ //私有变量和私有函数 var privateVariable=10; function privateFunction(){ return false; } //特权方法 this.publicMethod=function(){ privateVariable++; return privateFunction(); } } 对于这个例子,在创建MyObject的实例后,除了使用publicMethod()这一个途径外

C++的多态性

南楼画角 提交于 2020-03-21 06:53:17
1.静态多态 (1)函数重载 (2)操作符重载 2.动态多态 继承,虚函数 实现机制: 以下摘自于 http://blog.csdn.net/zyq0335/article/details/7657465 1 什么是多态? 多态性可以简单的概括为“1个接口,多种方法”,在程序运行的过程中才决定调用的机制 程序实现上是这样,通过父类指针调用子类的函数,可以让父类指针有多种形态。 2 实现机制 举一个例子: #include <iostream.h> class animal { public: void sleep() { cout<<"animal sleep"<<endl; } void breathe() { cout<<"animal breathe"<<endl; } }; class fish:public animal { public: void breathe() { cout<<"fish bubble"<<endl; } }; void main() { fish fh; animal *pAn=&fh; pAn->breathe(); } 答案是输出:animal breathe 结果分析: 1从编译的角度 C++编译器在编译的时候,要确定每个对象调用的函数的地址,这称为早期绑定(early binding),当我们将fish类的对象fh的地址赋给pAn时,C

Python学习之==>面向对象编程(一)

时间秒杀一切 提交于 2020-03-21 01:44:46
一、面向对象与面向过程   面向对象与面向过程是两种不同的编程范式,范式指的是按照什么方式去编程、去实现一个功能。不同的编程范式本质上代表对各种不同类型的任务采取不同的解决问题的思路。 1、面向过程编程   角色是执行者,把一个项目按照一定的顺序,从头到尾一步步执行下去。这种思想好理解,但只要前面一个步骤变了,后面的步骤也要跟着变,维护起来比较麻烦。 2、面向对象编程   角色是指挥者,把一个项目分成一个个小的部分,每个部分负责一方面的功能,整个项目由这些部分组合而成一个整体。类似一个机关,分为各个职能部门,只要符合一定的前提就行。面向对象的思想适合多人分工合作。   面向对象是包含面向过程思路的,比如定义类中的方法,每个小方法、小功能还是面向过程的的思想。   面向对象与面向过程的主要区别就是:面向对象可以使程序更加容易更改和扩展。 二、面向对象的特性 1、类   Class,相当于一个种类、一个模型。一个类就是对一类拥有相同属性的对象的抽象、蓝图、原形。在类中定义了这些对象都具备的属性、共同的方法。 2、对象(实例)   Object,根据模型造出来的具体的东西。一个对象就是一个类实例化后实例。一个类必须经过实例化后才能在程序中调用,一个类可以实例化多个对象,每个对象也可以有不同的属性。(对象就是实例,两者是一个意思) 3、实例化   初始化一个类,创造一个对象

6大设计原则之依赖倒置原则

左心房为你撑大大i 提交于 2020-03-20 20:31:53
依赖倒置原则的定义 依赖倒置原则的原始定义如下: High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions. 翻译过来,包含如下三层含义: 高层模块不应该依赖低层模块,两者都应该依赖其抽象 抽象不应该依赖于细节 细节应该依赖于抽象 高层模块和低层模块容易理解,每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是低层模块,原子逻辑的再组装就是高层模块.抽象就是指 接口或抽象类,两者都不能被实例化;细节就是实现类. 依赖倒置原则在Java语言中表现为: 模块间的依赖通过抽象产生,实现类之间不发生直接依赖,其依赖关系是通过接口或抽象类产生的 接口或抽象类不依赖于实现类 实现类依赖接口或抽象类 依赖倒置原则的好处 采用依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性. 依赖的三种写法 在开发中,对象的依赖关系有三种方式来传递 1.构造函数传递依赖对象 在类中通过构造函数声明依赖对象,这种方式叫做构造函数注入 2