构造函数

第七次发博不知道用什么标题好

核能气质少年 提交于 2020-03-07 02:15:01
一、this关键字,想起之前总是搞不懂this.name是where.name,嗯!第二个name就是形参name,所以这句话就是讲形参name的值传给成员变量name private void setName(String name ){   this.name=name; } 二、构造方法:1.没有返回值        2.名称要与本类名称相同(但是参数不一样,体现在 类型、个数、顺序)        3.如果不写构造函数,系统会自动生成无参无函数体的构造函数        4.构造方法的作用:为成员变量赋值        5.每个类至少有一个构造方法 来源: https://www.cnblogs.com/shi-yuan/p/10703700.html

对js构造函数,原型对象和原型的理解(3)

左心房为你撑大大i 提交于 2020-03-06 20:52:44
探究constructor 不知道大家发现了没有啊 在我们的对象原型__proto__和构造函数的原型对象prototype身上都有一个constructor属性 这个constructor它指回的是我们构造函数的本身 不知道大家有没有想过啊,如果我只有一个方法,那我就直接放到构造函数的原型对象身上了是吧,那我这样写,当然我zs的这个实例可以访问到sing方法了. function Star ( name , age ) { this . name = name ; this . age = age ; } Star . prototype . sing = function ( ) { console . log ( '我会唱歌' ) ; } var zs = new Star ( '张山' , 10 ) ; 那如果我有多个需要共享的方法,我那是不是得这样写了 function Star ( name , age ) { this . name = name ; this . age = age ; } Star . prototype . sing = function ( ) { console . log ( '我会唱歌' ) ; } Star . prototype . jump = function ( ) { console . log ( '我会跳' ) ; }

this 指向2 构造函数中的this

ε祈祈猫儿з 提交于 2020-03-06 16:17:50
构造函数中的 this 构造函数中的 this 指向, 指向这个构造函数的 实例对象(比较单一) 但是可以使用 call apply bind 去改变 this 的指向 如何通过这三个方法改变 this 不改变 this 指向 function Person ( ) { this . name = '张三' this . move = function ( ) { move ( ) } } function move ( ) { console . log ( this ) } let p1 = new Person ( ) p1 . move ( ) //Window 对象 move ( ) //Window 对象 改变 this 指向 function Person ( ) { this . name = '张三' this . move = function ( ) { move . call ( this ) } } function move ( ) { console . log ( this ) } let p1 = new Person ( ) p1 . move ( ) //打印结果 p1 这个对象 move ( ) //Window 对象 来源: CSDN 作者: Chennfengg222 链接: https://blog.csdn.net

构造函数里的this指向

会有一股神秘感。 提交于 2020-03-06 13:37:02
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>构造函数里的this指向</title> </head> <body> <script> /* * this 在面向对象里面的this 构造函数里面的this在构造函数里面, * 当new 函数的时候,这个函数就变成了构造函数this单一的就是指向实例化对象 * 但是可以通过call、apply、bind去改变构造函数里的this指向 * */ function Person(){ this.name = 'Tom'; this.age = 20; this.move = function(){ console.log(this); //指向Person // play(); //原本指向window play.call(this); //改变this指向,指向Person this.eat = function(){ console.log('eat的方法'); console.log(this); } } } function play(){ console.log(this) } var p1 = new Person(); p1.move(); p1.eat(); //必须调用了move()方法后才可以调用eat()方法 /* *

《C#高级编程(第6版)》第3章筆記----第3章对象和类型

不羁岁月 提交于 2020-03-06 09:54:13
结构与类的区别是它们在内存中的存储方式(类是存储在堆(heap)上的引用类型,而结构是存储在堆栈(stack)上的值类型)、访问方式和一些特征(如结构不支持继承)。较小的数据类型使用结构可提高性能。但在语法上,结构与类非常相似,主要的区别是使用关键字struct代替class来声明结构。 类成员----类中的数据和函数称为类的成员. 数据成员包含了类的数据-- 字段、常量和事件。数据成员可以是静态数据(与整个类相关)或实例数据(类的每个实例都有它自己的数据副本)。通常,对于面向对象的语言,类成员总是实例成员,除非用static进行了显式的声明。 函数成员提供了操作类中数据的某些功能,包括方法、属性、构造函数和终结器(finalizer)、运算符以及索引器。 构造函数是在实例化对象时自动调用的函数。它们必须与所属的类同名,且不能有返回类型。构造函数用于初始化字段的值。 终结器类似于构造函数,但是在CLR检测到不再需要某个对象时调用。它们的名称与类相同,但前面有一个~符号。 给方法传递参数 参数可以通过引用或值传递给方法。在变量通过引用传递给方法时,被调用的方法得到的就是这个变量,所以在方法内部对变量进行的任何改变在方法退出后仍旧发挥作用。而如果变量是通过值传送给方法的,被调用的方法得到的是变量的一个副本,也就是说,在方法退出后,对变量进行的修改会丢失。对于复杂的数据类型

继 承(面向对象特征之二)

▼魔方 西西 提交于 2020-03-06 09:34:32
好处: 1 :提高了代码的复用性。 2 :让类与类之间产生了关系,提供了另一个特征多态的前提。 父类的由来:其实是由多个类不断向上抽取共性内容而来的。 java中对于继承,java只支持单继承。java虽然不直接支持多继承,但是保留了这种多继承机制,进行改良。 单继承:一个类只能有一个父类。 多继承:一个类可以有多个父类。 为什么不支持多继承呢? 因为当一个类同时继承两个父类时,两个父类中有相同的功能,那么子类对象调用该功能时,运行哪一个呢?因为父类中的方法中存在方法体。 但是java支持多重继承。A继承B B继承C C继承D。 多重继承的出现,就有了继承体系。体系中的顶层父类是通过不断向上抽取而来的。它里面定义的该体系最基本最共性内容的功能。 所以,一个体系要想被使用,直接查阅该系统中的父类的功能即可知道该体系的基本用法。那么想要使用一个体系时,需要建立对象。建议建立最子类对象,因为最子类不仅可以使用父类中的功能。还可以使用子类特有的一些功能。 简单说:对于一个继承体系的使用,查阅顶层父类中的内容,创建最底层子类的对象。 子父类出现后,类中的成员都有了哪些特点: 1 :成员变量。 当子父类中出现一样的属性时,子类类型的对象,调用该属性,值是子类的属性值。 如果想要调用父类中的属性值,需要使用一个关键字: super This : 代表是本类类型的对象引用。 Super :

UML图及C#代码实现

江枫思渺然 提交于 2020-03-06 08:11:59
UML图及C#代码实现 表达方式 关系 代码实现 泛化(继承)(Generalization) 继承关系 Student:Person (java Extentend) 实现(Realization) 接口实现 轮船:交通工具 (java implements) 组合/合成(Composition) 整体与部分 部分不能离开整体而存在 Mouth mouth = new Mouth() 聚合(Agregation) 整体与部分 部分可以离开整体而存在 Car(Engine engine) Car() 构造函数 关联(Association) 拥有关系 一个类知道另一个类的方法和属性 Customer customer 类属性 依赖(Dependency) 使用关系 一个类的实现需要一个类的辅助 构造函数(Car car) 来源: https://www.cnblogs.com/zh672903/p/10809316.html

如何自己写一个new方法去实例对象

淺唱寂寞╮ 提交于 2020-03-06 03:47:25
我们经常会使用new方法去实例一个对象,这是封装好的方法,我们直接调用就可以了,那怎么自己去封装一个new方法呢? 首先我们要知道①对象是由函数生成的,②对象有__proto__属性,函数有prototype属性,③生成对象时,对象的__proto__属性指向函数的prototype属性,这是我们在实现new方法时需要知道的三点(具体为什么这里不做详述)! 那么如何去实现new方法,直接上图 定义一个函数New,参数为需要实例的构造函数fn,在函数里面先定义一个空对象res,首先判断fn有没有prototype属性,如果存在,我们把fn的prototype赋值给res的_proto_属性(参考上面三点的②),然后是关键的一步,我们先看Array.prototype.slice.call(arguments, 1),我们知道arguments表示正在执行的函数(即New函数)的参数。arguments是一个结构类似数组的对象,我们可以看到有两个参数,一个是传入的构造函数,第二个是要传给构造函数的参数,我现在想要获取第二个参数,有没有简单的办法呢,我发现数组中可以使用slice方法去分割数组元素并获取,但是对象并没有slice方法,这个时候我们可以使用call方法去改变this的指向,让对象也能够使用数组的特有方法,这是非常巧妙的! 同样的,fn.apply(res, Array

JavaSE!面向对象!!!!

情到浓时终转凉″ 提交于 2020-03-06 03:21:27
1. 面向对象的编程思想: 面向对象的编程思想就是把一个事物看成一个整体,把这个事物中的属性(特征)和功能(方法)表述出来。 面向对象的编程思想更贴近于人的正常思维方式。 面向对象的编程思想来源于生活服务于生活。 面向对象的编程思想中,一定会用到面向过程(以流程为基本单位,注重最后结果。)的编程思想。有缺陷:功之间有很强的关联。不利于程序的维护和扩展。 面向对象的特征: 抽象!! 封装!! 继承!! 多态!! 。 2. 对象 在现实生活中,具体存在的一个事物。 在java编程中,万事万物皆对象。 特点: 在java编程中,无论两个事物多么相近或是相似,他们永远都是两个不同的对象。 各种法律、规则制度也是一种对象。 对象的内存图解 1 1.在堆内存中开辟一个空间并分配地址 2.按照类的描述,在该空间中定义成员变量 并且有默认初始化值 3.加载成员函数进入方法区(只加载一次) 4.对象创建完毕 将空间地址赋值给相应的变量 5.变量(p1/p2)调用成员变量 先通过该变量所存储的地址去堆空间中找 然后在该空间中找相应的成员变量 6.变量(p1/p2)调用成员函数 直接去方法区中找该成员函数 将该函数加载进栈内存开始运行 为了方便区分哪个对象调用的该成员函数 由this这个关键字段 来区分 this主要存的是当前对象的地址 注意:当成员函数在操作变量的时候 先在当前函数的空间里找 局部变量

面向对象 - day02

强颜欢笑 提交于 2020-03-06 01:21:34
创建对象:   new运算符: 1. 执行函数 2. 自动创建一个空对象 3. 把空对象指向另一个对象 4. this绑定到这个空对象 5. 隐式返还this 原型链: 链上都是对象,有限长度 (终点是 null)   var obj = new Object();   var Tab = function (){}   var tab1 = new Tab();   1. 访问对象原型:obj.__proto__   2. 构造函数访问原型:Tab.prototype   3. 原型链: tab1.__proto__ (tab1.__proto__).__proto__ ((tab1.__proto__).__proto__ ).__proto__ 【Tab.prototype Object null 】   4. 原型链的终点是: null (会不会很惊讶) 构造函数判断类型:   tab1.__proto__.constructor.name // Tab   tab1.__proto__.__proto__.constructor.name // Object   tab1.__proto__.__proto__ .__proto__ // null Object.prototype.__proto__ == null 工厂模式: 像产品一样生产对象