œ# 创建一个基本的 JavaScript 对象
【我的提交】
let dog = {
name:'test',
numLegs:4,
};
【涉及知识点】
- Object对象创建
- Object对象属性与键值
使用点符号来访问对象的属性
【我的提交】
let dog = {
name: "Spot",
numLegs: 4
};
// 只修改这一行下面的代码
console.log(dog.name);
console.log(dog.numLegs);
【涉及知识点】
- 点符号可以访问对象中的属性
[在对象上创建方法](面向对象编程: 在对象上创建方法 | freeCodeCamp.org)
【我的提交】
let dog = {
name: "Spot",
numLegs: 4,
// this is my commit
sayLegs:()=>{
return `This dog has ${dog.numLegs} legs.`;
}
};
dog.sayLegs();
【涉及知识点】
- 在对象上可以直接创建方法
- 通过点符号可以调用对象中的方法
- 模版字符串
[使用 this 关键字提高代码重用性](面向对象编程: 使用 this 关键字提高代码重用性 | freeCodeCamp.org)
【我的提交】
let dog = {
name: "Spot",
numLegs: 4,
// this is my commit
sayLegs: function() {return "This dog has " + this.numLegs + " legs.";}
};
dog.sayLegs();
【涉及知识点】
- 在对象中使用this访问对象内的其他属性
- 好处:减小引用变量名发生改变时出现的引用出错。
- 对象中的this指向的是该对象的引用地址
[定义构造函数](面向对象编程: 定 义构造函数 | freeCodeCamp.org)
【我的提交】
// this is my commit
function Dog(){
this.name='test';
this.color='white';
this.numLegs=4;
}
【涉及知识点】
-
构造函数特点
-
函数名大写
【原因】便于区分构造函数和非构造函数
-
不需要设置返回值
-
通过this来创建该对象的新属性
-
[使用构造函数创建对象](面向对象编程: 使用构造函数创建对象 | freeCodeCamp.org)
【我的提交】
function Dog() {
this.name = "Rupert";
this.color = "brown";
this.numLegs = 4;
}
// 只修改这一行下面的代码
const hound=new Dog();
【涉及知识点】
-
构造函数内的this总是指向被创建的对象
-
通过new来借助构造函数来创建对象
【原因】这样才会创建一个新的实例对象
[扩展构造函数以接收参数](面向对象编程: 扩展构造函数以接收参数 | freeCodeCamp.org)
【我的提交】
//this is my commit
function Dog(name,color) {
this.name=name;
this.color=color;
this.numLegs=4;
}
const terrier=new Dog('test','black')
【涉及知识点】
- 通过传参来定义每个实例的属性
[使用 instanceof 验证对象的构造函数](面向对象编程: 使用 instanceof 验证对象的构造函数 | freeCodeCamp.org)
【我的提交】
function House(numBedrooms) {
this.numBedrooms = numBedrooms;
}
// 只修改这一行下面的代码
const myHouse=new House(2);
myHouse instanceof House;
【涉及知识点】
- a
instanceof
B 用于检验该实例a是否为构造函数B创建
[了解自有属性](面向对象编程: 了解自有属性 | freeCodeCamp.org)
【我的提交】
function Bird(name) {
this.name = name;
this.numLegs = 2;
}
let canary = new Bird("Tweety");
let ownProps = [];
// 只修改这一行下面的代码
for(const [key,value] of Object.entries(canary)){
ownProps.push(key);
}
【涉及知识点】
- for...of 语句
- Object.entries(object)
- 遍历对象是返回二维数组(其子元素为[key,value])
- Object自身属性——直接定义在实例对象上的属性
[使用原型属性来减少重复代码](面向对象编程: 使用原型属性来减少重复代码 | freeCodeCamp.org)
【我的提交】
function Dog(name) {
this.name = name;
}
// 只修改这一行上面的代码
let beagle = new Dog("Snoopy");
Dog.prototype.numLegs=2;
【涉及知识点】
-
Object.prototype[key]=value 可以直接修改构造函数内的属性
-
已创建的实例本身属性没有,但是可以访问到新加的构造函数属性
//以我提交内容为例
console.log(beagle)
//{name:Snoopy}
console.log(beagle.numLegs)
//2- 【原因】当需要访问的属性,在自身属性中没有时,会向上一级找构造函数的属性
-
[迭代所有属性](面向对象编程: 迭代所有属性 | freeCodeCamp.org)
【我的提交】
function Dog(name) {
this.name = name;
}
Dog.prototype.numLegs = 4;
let beagle = new Dog("Snoopy");
let ownProps = [];
let prototypeProps = [];
// 只修改这一行下面的代码
for (let property in beagle) {
if(beagle.hasOwnProperty(property)) {
ownProps.push(property);
} else {
prototypeProps.push(property);
}
}
【涉及知识点】
- for...in 语句——用于遍历对象中的属性
- Object.hasOwnProperty(key)——用于判断自身属性
- 对象属性分类
- 自身属性(又称:实例属性)
- prototype属性(又称:构造函数属性、原型属性)
[了解构造函数属性](面向对象编程: 了解构造函数属性 | freeCodeCamp.org)
【我的提交】
function Dog(name) {
this.name = name;
}
// 只修改这一行下面的代码
function joinDogFraternity(candidate) {
if (candidate.constructor === Dog) {
return true;
} else {
return false;
}
}
【涉及知识点】
- Object.constructor 获取实例的构造函数
- 每一个实例对象都有一个特殊的constructor属性