1.函数
2.构造函数和new关键字
3.python,js与java关于类和对象的理解

1.函数的创建方式

方式一:函数声明/函数语句(推荐)

1
2
3
function 函数名(参数1, 参数2, ... , 参数3) {  
// 需要执行的代码块
}

方式二:函数表达式 (function expression)

1
var myFunction = function name([param1, param2, ... paramN){statements}

ps:在使用函数表达式时,注意以下几点

  • name:函数名,可以省略。当省略函数名的时候,该函数就成为了匿名函数。
  • param:传递给函数的参数的名称,一个函数最多可以有255个参数.
  • statements:组成函数体的声明语句。

方式三:箭头函数

包含多条语句,这时候就不能省略{ … }和return,且仅适用于ES6语法

1
2
3
4
// 箭头函数最标准的写法,不要搞一些花里胡哨的
let funcName = (a,b) =>{
return a > b ? a : b;
}

方式四:自执行函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//1.使用 !开头,结构清晰,不容易混乱,推荐使用;
!function(){
document.write('ni hao');
}();

//2.能够将匿名函数与调用的()为一个整体,官方推荐使用;
(function(){
document.write('hello');
}());

//3.使用 void
void function(){
document.write('ni hao');
}();

2.js的构造函数

  1. 函数名首字母大写(不强制,味蕾和普通函数的区别)
  2. 通过this来给对象添加属性和方法
  3. new关键字使用自定义的构造函数去创建,那么new不能省略
  4. ES5只有构造函数,ES6则可以使用class类

举例说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function Student(name,age,grender) {
// 添加属性
this.name = name;
this.age = age;
this.grender = grender;

// 添加方法
this.sayHi = function(){
return name+":"+age+":"+grender
}
}
// 使用构造函数来创建对象(new关键字使用自定义的构造函数去创建对那么new不能省略)
var student1 = new Student("chd",18,"man");
var student2 = Student("lmm",19,"woman"); // undefined

// 调用对象的属性和方法
console.log(student1.name); // 调用属性:"chd"
console.log(student1.sayHi()); // 调用方法:"chd:18:man"

instanceof判断是否是实例对象,返回true或者false

2020-3-28: 关于构造函数的新增
我们知道在一个已存在的对象构造器中是不能添加新的属性的。若想再添加新的属性,要么删除原来的对象,新建一个构造函数;要么通过prototype(原型对象)来再原来的基础上新增
举例说明:

1
2
3
4
5
6
7
8
9
10
11
function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
// 在已存在的对象构造器中新增一个nationality属性
Person.prototype.nationality = "English";

let myFather = new Person("John", "Doe", 50, "blue");
document.getElementById("spider案例").innerHTML ="我父亲对国籍是 " + myFather.nationality;

3.python,js与java关于类和对象的理解

Python的类和对象

1
2
3
4
5
6
7
8
9
10
11
12
13
class 类名(object/父类):
def __init__(self,参数1,参数2):
self.对象的属性1 = 参数1
self.对象的属性2 = 参数2
def 方法名(self):pass
def 方法名2(self):pass

对象名 = 类名(实参1,实参2) #对象就是实例,代表一个具体的东西
#类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法
#括号里传参数,参数不需要传self,其他与init中的形参一一对应
#结果返回一个对象
对象名.对象的属性 #查看对象的属性,直接用 对象名.属性名 即可
对象名.方法名() #调用类中的方法,直接用 对象名.方法名() 即可

js的class类与对象

(本质上看js是没有class这个概念的:)constructor 是一种用于创建和初始化class创建的对象的特殊方法(与js的构造函数用法相差无几)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Polygon {
constructor(age) {
this.name = "Polygon";
this.age = age;
this.demo = function(){
return this.name+":"+this.age
}

}
}

const poly1 = new Polygon(18);

console.log(poly1); // [object Object]
console.log(poly1.demo()); // "Polygon:18"

java的类与对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class OOP {
public static void main(String[] args) {
// 在通过new操作符调用的时候,构造方法的参数数量、位置和类型一一对应
Person p = new Person("chd",18,10086);
System.out.println(p.getAge());
// 调用实例对象的属性
System.out.println(p.tel);
System.out.println(p.getAge());
System.out.println(p.getName());
}
}

class Person {
// 这个不能省略,用以声明变量
private String name;
private int age;
public int tel;

// 这就是Java的构造方法,类似于python的def __init__函数
public Person(String name, int age,int tel) {
this.name = name;
this.age = age;
this.tel = tel;
}

public String getName() {
return this.name;
}

public int getAge() {
return this.age;
}
}

参考文章


 评论

联系我 | Contact with me

Copyright © 2019-2020 谁知你知我,我知你知深。此恨经年深,比情度日久

博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议