C语言与程序设计(大学课程)
本周学习了数组
数组是由相同类型组合成的集合
数据类型可以是三种基本类型
int ,char double
也可以是自定义类型
数组的创建
int arr[8]={0,1,2,3,4,5,6,7};
创建数组时,数组的个数为常量
理论上可以写动态数组,但我不会,先挖个坑
数组的使用
数组的使用是从0开始的
arr[0]=0
数组的使用不能超出范围
arr[8]=9
在部分编译器中可运行但有可能会出现不可预知的错误
JavaScript 算法和数据结构
面向对象编程
JavaScript 对象
对象是一个包含相关数据和方法的集合
下面是一个标准的对象
let duck = {
name: "Aflac",
numLegs: 2,
sayName: function() {return "The name of this duck is " + duck.name + ".";}
};
duck.sayName();
name为键key
在后面的"Aflac"为值value
访问方法:
括号表示法,点表示法
关键词 this
关键字"this"指向了当前代码运行时的对象
可将上面代码的duck.name改写
name: "Aflac",
numLegs: 2,
sayName: function() {return "The name of this duck is " + this.name + ".";}
};
构造函数
构造函数是为了我们更方便的创建对象
创建构造函数
function Bird() {
this.name = "Albert";
this.color = "blue";
this.numLegs = 2;
}
利用构造函数创建新实例
let sparrow=new Bird;
这样就创建了以Bird为原型的
构造函数可以接收参数
function Bird(name, color) {
this.name = name;
this.color = color;
this.numLegs = 2;
}
可用instanceof方法查询一个对象不是使用构造函数创建
新对象 instanceof 构造原型;
返回值为 布尔值
构造函数的属性
- 自有属性
上方的对象的 name 和 color 和 numLegs 被叫做自有属性,
因为它们是直接在实例对象上定义的。
通过hasOwnProperty()函数判断是否为自有属性
- 原型属性(prototype属性)
通过原型所定义的属性。用于共享属性和方法。从原型对象中继承来的属性,一旦原型对象中属性值改变,所有继承自该原型的对象属性均改变。
通过prototype 方法新增原型属性
Bird.prototype.numLegs = 2;
接下来所有使用构造函数Bird创建的对象 都会有numLegs属性
numLegs属性被称为原型属性
Bird 构造函数创建了一个 duck 对象
duck将继承Bird的原型属性
使用 isPrototypeOf 方法来验证对象与原型属性之间的关系
Bird.prototype.isPrototypeOf(duck);
- constructor 属性
利用构造函数创建的实例对象都有一个 constructor 属性
let duck = new Bird();
let beagle = new Dog();
console.log(duck.constructor === Bird);
console.log(beagle.constructor === Dog);
duck的constructor 属性为Bird
beagle的constructor 属性为Dog
给构造函数添加多个prototype的方法
Bird.prototype = {
numLegs: 2,
eat: function() {
console.log("nom nom nom");
},
describe: function() {
console.log("My name is " + this.name);
}
};
但要注意的是在给函数原型添加prototype属性时,
会将对象的constructor 属性清除,变为Object
因此在添加prototype属性时要给原型对象中定义一个 constructor 属性
Bird.prototype = {
constructor: Bird,
numLegs: 2,
eat: function() {
console.log("nom nom nom");
},
describe: function() {
console.log("My name is " + this.name);
}
};
原型链
JavaScript 中所有的对象(除了少数例外)都有自己的 prototype。 而且,对象的 prototype 本身也是一个对象。
prototype 的原型是Object.prototype