构造函数

函数的四种调用方式

流过昼夜 提交于 2020-01-27 22:48:51
函数的四种调用方式 函数有下列调用模式 函数调用模式 方法调用模式 构造器模式 上下文模式 1. 函数调用 模式 要调用,就肯定要先定义,函数的定义方式: 声明式: function fuc() {} 表达式式: var func = function() {}; Function: new Function( ‘参数’,…,’函数体’ ); 单独独立调用的,就是函数调用模式,即 函数名( 参数 ),不能加任何其他的东西, 对象 o.fuc() 就不是了。 在函数调用模式中, this 表示全局对象 window 任何自调用函数都是函数模式。 2. 方法调用 模式 method 所谓方法调用,就是用对象的方法调用。方法是什么,方法本身就是函数,但是,方法不是单独独立的,而是要通过一个对象引导来调用。 就是说方法对象一定要有宿主对象。 即 对象.方法(参数) this表示引导方法的对象,就是指宿主对象 对比-函数调用模式: 方法调用模式是不是独立的,需要宿主,而函数调用模式是独立的 方法调用模式方式:obj.fuc(); 函数调用模式方式: fuc(); 方法调用模式中,this指宿主。而函数调用模式中 this 指 全局对象window 美团的一道面试题 var length = 10; function fn ( ) { console.log( this.length ); /

Javascript继承之最佳实践

不打扰是莪最后的温柔 提交于 2020-01-27 20:43:51
尊重原创,转载请注明出处:http://blog.csdn.net/zoutongyuan 什么是继承? 继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。 在Javascript 中 没有 类的概念, 它是通过构造函数来产生 对象, 构造函数 就是一个普通的函数。通常当函数名 为 大写开头的。我们觉得是构造函数,否则 就是普通的方法。 function A() { this.name = 'A Class instance'; } function m1() { } 既然 Javascript 是 通过构造函数来产生 对象。那我们怎么定义它的 属性、方法呢? var a1 = new A(); 是新创建一个A类对象,默认情况下。在构造函数中,使用this指向的是 新创建的对象。 而Javascript的对象属性 能够 晚绑定,即 var obj = {}; obj.name = 'obj1'; obj.say = function say() { console.log(this.name); } 能够先产生对象,在须要添加属性时。 通过 obj.属性名 或 obj['属性名'] 来加入属性。 所以我们在构造函数中 使用 this. 属性名 来 定义产生的 对象 的 属性和方法。 function A() {

JavaScript创建对象的方式

狂风中的少年 提交于 2020-01-27 20:41:15
一、工厂模式    工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程。     考虑到在 ECMAScript 中无法创建类,开发人员就发明了一种函数,用函数来封装以特定接口创建对象的细节。 function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function(){ alert(this.name); }; return o; } var person1 = createPerson("Nicholas", 29, "Software Engineer"); var person2 = createPerson("Greg", 27, "Doctor"); console.log(person1); console.log(person2);   运行结果如下图所示:   函数 createPerson()能够根据接受的参数来构建一个包含所有必要信息的 Person 对象。   可以无数次地调用这个函数,而每次它都会返回一个包含三个属性一个方法的对象。   工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)。 二、构造函数模式  

C/C++ 面试知识点2

流过昼夜 提交于 2020-01-27 19:13:25
7.浅拷贝和深拷贝的原理 浅拷贝(位拷贝)就是两/多个对象共享一块内存,其缺点就是当析构一个对象的时候,另一个对象也不存在了,如果再使用它就会发生错误。 同一块资源释放多次,崩溃或者内存泄漏 深拷贝就是完完全全的复制出一个对象,两者在内存上无任何关系。 必须显式提供拷贝构造函数和赋值运算符 缺省拷贝构造函数 在拷贝过程中是按字节复制的,对于指针型成员变量只复制指针本身,而不复制指针所指向的目标--浅拷贝。 8.常见的不能声明为虚函数的有哪些? 普通函数(非成员函数) 静态成员函数 内联成员函数 构造函数 友元函数 9.C++的静态多态和动态多态 静态多态:运行前确定类型,采用的是函数重载和泛型 动态多态:运行后确定类型或者函数调用,采用虚函数实现 10.C++虚函数的原理 11.C++虚函数占用类的大小 因为只需要维护一个指向虚表的指针,所以大小为4或8个字节 静态成员和函数不计入sizeof中。 12.new与malloc的区别 new与malloc的10点区别 1. 申请的内存所在位置 : new操作符从 自由存储区(free store) 上为对象动态分配内存空间,而malloc函数从 堆 上动态分配内存。 自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区 自由存储区是否能够是堆(问题等价于new是否能在堆上动态分配内存

抽象类的构造函数

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-27 09:40:25
先通过一个实类继承来理解: Class Animals{ public Animals(){} public void eat(); } Class Dog extends Animals{ //super();不写父类构造的情况下,相当于会默认有个super(),调用父类的空参构造 pubilc Dog(){} @Override public void eat(){ print(“狗吃肉”); } } 在有此继承关系的情况下,如果对dog进行实例化即new dog()操作,那么一定会调用new Animals()操作,这时候就需要调用animals的构造函数后才能调用子类的构造函数。 这样就好理解了,抽象类也是可以继承的,而继承后就会有子类的实例化的操作,而如果抽象类中没有构造方法,那继承此抽象类的子类将无法实例化。 来源: CSDN 作者: Victoria Coleone 链接: https://blog.csdn.net/qq_33581012/article/details/103846236

OpenCV3之Mat类的创建

自古美人都是妖i 提交于 2020-01-27 09:17:03
文章目录 一、指定内值创建Mat 1.构造函数 (1)原型1:尺寸行列 (2)原型2:尺寸Size 2.指定每个初始值 3.Matlab式初始方法 二、只指定尺寸创建Mat 1.构造函数 (1)原型1:尺寸行列 (2)原型2:尺寸Size 2.Mat_\ 3.Mat Mat::create() (1)原型1:尺寸行列 (2)原型2:尺寸Size (3)创建相同尺寸、type的图片 一、指定内值创建Mat 1.构造函数 (1)原型1:尺寸行列 Mat ( int rows , int cols , int type , const Scalar & s ) 参数 rows:行/高 cols:列/宽 type:类型。 即上面的CV_8UC3 s:Scalar数据结构,用于初始化每个像素通道的可选值 如: //火红色(RGB)是255,46,51,那么Scalar(BGR)就是51,46,255 Mat A ( 400 , 800 , CV_8UC3 , Scalar ( 51 , 46 , 255 ) ) ; imshow ( "Effect" , A ) ; (2)原型2:尺寸Size Mat ( Size sz , int type , const Scalar & s ) 如: Mat A ( Size ( 400 , 800 ) , CV_8UC3 , Scalar ( 51

第三章 类

血红的双手。 提交于 2020-01-27 05:31:00
第一节:成员函数、对象拷贝、私有成员 类的声明和定义写在头文件和源文件中时,倘若多个源文件include了该类的头文件,这里不会出现重复类的重复定义。但是如果换成全局变量就会出现变量重复定义的报错。 第二节 构造函数详解、explicit、初始化列表 构造函数:在创建类的对象的时候,这个特殊的成员函数就会被系统自动调用。用于初始化类对象的数据成员。 (1)构造函数没有返回值,前面也没有void (2)不可以手动调用构造函数 (3)正常情况下,构造函数应该被声明为public因为类的缺省的成员是私有成员,所以我们必须说明构造函数是一个public函数,否则无法直接创建该类的对象。 (4)构造函数中如果有多个参数,则我们创建对象的时候也要带上这些参数 多个构造函数:一个类中可以有多个构造函数,可以为类的对象提供多种初始化方法,但是对个构造函数之间要有不同的地方。 在函数定声明的时候前面加上explicit 构造函数初始化列表: 第三节:inline、const、mutable、this、stacic 第四节:类内初始化、默认构造函数、=default 第五节 拷贝构造函数 来源: CSDN 作者: Xiao2018428 链接: https://blog.csdn.net/Xiao2018428/article/details/103796366

React 第一个小游戏(井字棋)知识关键点

北城余情 提交于 2020-01-27 05:09:27
1、React是一个声明式,高效且灵活的用于构建用户界面的JavaScript库 通过使用组件来告诉React我们希望在屏幕上看到什么。当数据发生变化时,React会高效的更新并重新渲染我们的组件 2、 render返回了一个React元素,这是一种对渲染内容的轻量级描述。大多数的React开发者使用了一种名为"JSX"的特殊语法, 语法<div/>会被编译成React.creatElement('div'); 3、 在JavaScript class中,每次你定义其子类的构造函数时,都需要调用super方法。因此, 所有含有构造函数的React组件中,构造函数必须以super(props)开头; 4、当你遇到需要同时获取多个子组件数据,或者两个组件之间需要相互通讯的情况时,需要把子组件的state数据 提升至其共同的父组件 当中保存。之后父组件可以通过props将状态数据传递到子组件当中。这样应用当中所有组件 的桩体数据就可以更方便的同步共享了。 5、为了提高可读性,我们把返回的React元素拆分成了多行,同时在最外层加了小括号,这样JavaScript解析时候就不会 在return的后面自动插入一个分号从而破坏代码结构了; 6、因为DOM元素<button>是一个内置组件,因此其onClick属性在React中有特殊含义。而对于用户自定义的组件来说,命名就可以 由用户自己定义了

Java枚举类的高级用法说明

泪湿孤枕 提交于 2020-01-27 02:49:38
public enum Color{ RED, BLUE, BLACK, YELLOW, GREEN } Color c = Color.RED; 如上,是我们通常使用枚举类型的常用方式。 从编写方式上看,enum很像是特殊的class,实际上enum声明定义的类型就是一个类。而这些类都是类库中Enum类的子类。查看编译之后的字节码文件可以发现enum类型被单独编译成了字节码文件Color.class。 Compiled from "Color.java" public final class Color extends java.lang.Enum<Color> { public static final Color RED; public static final Color BLUE; public static final Color BLACK; public static final Color YELLOW; public static final Color GREEN; public static Color[] values(); public static Color valueOf(java.lang.String); static {}; } 由上可知: 1. enum类型是一个不可以被继承的final类。其枚举值都是Color类型的类静态常量

自研模块加载器(二) 加载器结构与设计导论

荒凉一梦 提交于 2020-01-26 17:52:42
结构导论 模块部分 数据初始化 : 加载器中设计来一个名为Module的构造函数,每个模块都是此构造函数实例对象。构造函数中给实例对象扩展了"未来"所需用到的属性和方法。 模块存储 : 加载器中设计来一个名为cache的缓存对象,每个文件(模块)都会存储在cache对象中。 具体存储方式: { "当前模块的绝对路径" : new Module()}, 注意: 当前模块的绝对路径是通过资源部分, 资源定位 方法实现的。 每个模块创建都先初始化数据,存储在缓存对象中。 资源部分 依赖管理: 已知当前模块在cache中的形态,{"当前模块的绝对路径": new Module()} 换算: {"当前模块的绝对路径": {uri: "当前模块的绝对路径", deps:[]}}; deps存储当前模块的依赖列表,依赖列表通过动态加载script文件正则解析获取。 重点: 解析依赖->获取依赖模块绝对路径->动态加载->提取依赖->解析依赖 . 递归的方式加载所有的模块,直至模块全部加载完毕。 资源定位 :加载器中设计了一个 resolve()的方法把模块名解析成绝对路径格式。 模块名的获取: startUp.use(['a.js', 'b.js']); startUp.use()加载器的启动方法,启动时会去调用传入数组列表中的模块。 动态加载script文件: 通过加载器resolve(