构造函数

JavaScript对象中的构造方法

倖福魔咒の 提交于 2020-02-07 01:36:24
JavaScript 类/对象可以具有构造函数吗? 它们是如何创建的? #1楼 这是一个构造函数: function MyClass() {} 当你做 var myObj = new MyClass(); 执行 MyClass ,并返回该类的新对象。 #2楼 我想我会发布有关javascript闭包的信息,因为目前还没有人使用闭包。 var user = function(id) { // private properties & methods goes here. var someValue; function doSomething(data) { someValue = data; }; // constructor goes here. if (!id) return null; // public properties & methods goes here. return { id: id, method: function(params) { doSomething(params); } }; }; 欢迎对此解决方案提出意见和建议。 :) #3楼 这是我有时在JavaScript中用于 OOP 相似行为的模板。 如您所见,您可以使用闭包来模拟私有(静态和实例)成员。 new MyClass() 将返回的对象是仅具有分配给 this 对象的属性,并且位于“类”的

Effective C++学习笔记(0)

元气小坏坏 提交于 2020-02-06 23:11:57
0 导读 术语 声明式(declaration) 对象声明(object)——指定类型 函数声明(function)——指定参数和返回类型 类声明(class)——指定类名 模板声明(template)——tempalte或template 定义式(definition) 1、为对象(object)分配内存 2、为函数(function)或模板函数(template function)提供代码本体 3、列出类(class)和模板类(template class)的成员 初始化(initialization) 对于类来说,其对象的初始化需要通过构造函数来实现。 1、默认构造函数(default constructor) 参数列表要么没有参数,要么所有参数都提供缺省值。 2、构造函数(constructor) 在自己定义构造函数时,可以在类名前加上 explicit关键字 进行限定,禁止编译器执行非预期的类型转换。即内置类型向类类型的转换不能通过隐式类型转换进行,而只能通过 显示类型转换 (强制类型转换)实现。 3、复制构造函数(copy constructor) 一般在定义一个类时,会自动定义复制构造函数和重载复制运算符,但 如果私有数据中有指针类型变量时,就需要自己重新定义复制构造函数和重载的赋值运算符,实现深度复制——拷贝指针所指向的地址中所存放的值 ;否则会自动执行浅复制—

剑指offer速记

核能气质少年 提交于 2020-02-06 23:00:31
一、 const:如果函数参数是指针,且仅作输入用,则必须在类型前面加上const,以用来防止该指针在函数体内被意外修改。 const在*前表示指针所指的内容固定(不允许*abc="789"),指针的指向可变 const int *abc="123" ;abc="345"; const在*后表示指针本身的指向固定(不允许a++),指针所指的内容可变 char tmp[]="123"; int * const abc=tmp;abc[1]='0'; 二、 C++中,四个与类型转换相关的关键字:static_cast、const_cast、reinterpret_cast、dynamic_cast。 空类型的size是1字节,虽然不包含任何信息但是必须在内存中占有一定空间。添加了构造函数和析构函数size不变。如果有虚函数,会为该类型创建虚函数表,并在该类型的每一个实例中添加一个指向虚函数表的指针,32位机器上一个指针4字节,64位机器上一个指针8字节 构造函数不能以本类的对象作为唯一参数,以免和复制构造函数相混淆Complex (Complex c) {...} 来源: https://www.cnblogs.com/dzzy/p/12271201.html

js中的继承方式

守給你的承諾、 提交于 2020-02-06 19:54:20
一、原型链继承 // 父类型 function Father(name){ this.name = name; } Father.prototype.showFatherName = function(){ console.log(this.name); }; // 子类型 function Child(name){ this.name = name; } Child.prototype= new Father(); // 原型链继承 var c = new Child("jyy"); c.showFatherName();   实际中很少会单独使用原型链继承。     缺点:     1. 父类型的实例属性会变为子类型的原型属性     2. 无法向夫类型的构造函数中传递参数。 二、借用构造函数 function Father(){ this.name = "jyy";}Father.prototype.display = function(){ console.log(this.name);};function Child(){ Father.call(this);}var c1 = new Child();console.log(c1.name);c1.display(); // error   缺点:无法解决函数复用性的问题 三、组合式继承  

JavaScript创建对象常见方式

只谈情不闲聊 提交于 2020-02-06 18:21:31
1.创建一个object的实例,再添加属性和方法    var person = new Object();     person .name = "zhangsan";     person.age = 20;     person.sayName = function(){       console.log(this.name);     } 2.字面量模式    var person = {       name:"zhangsan",       age:20,       sayName: function(){         console.log(this.name);       }     } 3.工厂模式(解决创建多个相似对象和大量代码重复问题)    function createPerson(name,age){       var o = new Object();       o.name = name;       o.age = age;       o.sayname = funtion(){         console.log(this.name)       }         return o;     }     var person1 = createPerson("zhangsan",20);     var person2 =

C#-面向对象-OOP基础概念

可紊 提交于 2020-02-06 12:36:56
1.方法的签名是指 ? 答:方法名和该方法的参数列表,类型,大小,位置。 2.请简述C#中结构与类的区别? 答:数据类型不同:结构是值类型,值类型在堆栈上分配地址,所有的基类型都是结构类型,类是引用类型,引用类型在堆上分配地址。 继承性:结构不能从另外一个结构或者类继承,本身也不能被继承,类完全可扩展的,除非显示的声明 sealed,否则类可以继承其他类和接口,自身也能被继承,虽然结构不能被继承 可是结构能够继承接口,方法和类继承接口一样 内部结构:结构没有默认的构造函数,但是可以添加构造函数 ,没有析构函数,没有 abstract 和 sealed(因为不能继承) ,不能有 protected 修饰符,可以不使用 new 初始化 ,在结构中初始化实例字段是错误的。类有默认的构造函数 ,有析构函数,可以使用 abstract 和 sealed,有 protected 修饰符,必须使用 new 初始化。 3 C#中类可以实现多继承吗?通过什么方式实现呢? 答:C#中类不能够多继承,必须通过接口实现。 4.继承是面向对象编程的一个重要的概念.请简述继承的概念和优点. 答:继承:一个类可以有能力直接从另一个类获得其代码和数据,派生类从基类那里获得其所有成员。 优点:使用继承无需从头开始创建新类,便可以在现有类的基础上添加新方法、属性和事件(事件是对用户操作)的响应。,既省时又省力。 5

JS对象、包装类

梦想的初衷 提交于 2020-02-06 11:18:50
JS对象 对象的创建方法: 1 var Object = {} plainObject 对象字面量/对象直接量 2 构造函数(两种)大驼峰式命名规则 1)系统自带的构造函数 Object() new Object() 2)自定义 构造函数内部原理: 构造函数三段式 function Student(name,age,sex) { this.name = name; this.age = age; this.sex = sex; } 首先实现第一步隐式变化: 1在逻辑的顶端生成 var this = {} function Student(name,age,sex) { //var this = {}; this.name = name; this.age = age; this.sex = sex; } 2然后根据形式参数的个数对this 进行增加属性并赋值 那么这个函数的 AO 可以大致理解为: AO{ this:{name:'zhangsan' ,age:18,sex:'male' }; 3最后将这个return返回 function Student(name,age,sex) { 1//var this = { 2// name:"zhangsan", // age:18, // sex:"male" // }; this.name = name; this.age =

c++函数笔记

萝らか妹 提交于 2020-02-06 05:56:55
构造函数 名字与类名相同,可以有参数,不能有返回值(void 也不行) 作用是对对象进行初始化,编译器会默认生成一个构造函数(什么也不干) 对一个对象构造函数必定调用,且只会调用一次 一个类可以有多个构造函数,参数个数或类型不同(可以有默认类型转换,如int转double) class TEST { public : TEST ( int n ) { } //1 TEST ( int n , int m ) { } //2 TEST ( ) { } //3 } ; TEST array [ 3 ] = { 1 , TEST ( 1 , 2 ) } ; 三个元素分别用 1 , 2 , 3 初始化 TEST * p [ 3 ] = { new TEST ( 4 ) , new TEST ( 1 , 2 ) } ; 只有两个元素被初始化,分别用 1 , 2 析构函数 名字是对象名前加一个~ 如~TEST() 没有参数和返回值,一个类只能有一个析构函数,不像构造函数可以重载 默认生成析构函数,对象生命期结束时会自动调用析构函数 一般用来删除空间 class TEST { public : ~ TEST ( ) { cout << "destruction" << endl ; } } ; int main ( ) { TEST array [ 2 ] ; cout << "end main

c# List times 初始值

风格不统一 提交于 2020-02-06 04:27:33
C#对象和集合初始值设定项 对象初始值设定项 使用对象初始值设定项,你可以在创建对象时向对象的任何可访问字段或属性分配值,而无需调用后跟赋值语句行的构造函数。 利用对象初始值设定项语法,你可为构造函数指定参数或忽略参数(以及括号语法)。 以下示例演示如何使用具有命名类型 Cat 的对象初始值设定项以及如何调用默认构造函数。 class Cat { // Auto-implemented properties. public int Age { get; set; } public string Name { get; set; } } Cat cat = new Cat { Age = 10, Name = “Fluffy” }; 集合初始值设定项 集合初始值设定项允许在初始化实现 IEnumerable 的集合类或初始化具有 Add 扩展方法的类时,指定一个或多个元素初始值设定项。 元素初始值设定项可以是简单的值、表达式或对象初始值设定项。 通过使用集合初始值设定项,你将无需在源代码中指定对该类的 Add 方法的多个调用;编译器将添加这些调用。 下面的示例演示了两个简单的集合初始值设定项: List digits = new List { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; List digits2 = new List { 0 + 1, 12 % 3

C++中的二阶构造模式

依然范特西╮ 提交于 2020-02-06 01:58:56
1 C++中的二阶构造模式 1.1 半成品对象 首先回顾下构造函数: 类的构造函数用于对象的初始化。 构造函数与类同名并且没有返回值。 构造函数在对象定义时自动被调用。 思考如下几个问题: 如何判断构造函数的执行结果? 在构造函数中执行return语句会发生什么? 构造函数执行结束是否意味着对象构造成功? 实际上的构造函数: 只提供自动初始化成员变量的机会。 不能保证初始化逻辑一定成功。 执行return语句后构造函数立即结束。 构造函数只能决定对象的初始化状态,构造函数中初始化操作的失败不影响对象的诞生! 半成品对象的概念: 初始化操作不能按照预期完成而得到的对象。 半成品对象是合法的C++对象,也是Bug的重要来源。 1.2 二阶构造 工程开发中的构造过程可分为: 资源无关的初始化操作,不可能出现异常情况的操作。 需要使用系统资源的操作,可能出现异常情况,如:内存申请、访问文件。 二阶构造人为的将初始化过程分为两部分,二阶构造能够确保创建的对象都是完整初始化的。 示例代码: # include <stdio.h> class TwoPhaseCons { private : TwoPhaseCons ( ) // 第一阶段构造函数 { } bool construct ( ) // 第二阶段构造函数 { return true ; } public : static