JavaScript专项算法题(5):面向对象

简介: 面向对象使用实义化的对象挑战1/1 MAKEPERSON问题:构建一个称为makePerson的接受两个参数(name和age)的函数,返回一个对象。此函数会:创建一个空对象;给空对象一个键名为name的属性,键值为输入函数的name参数的值;给空对象一个键名为age的属性,键值为输入函数的age参数的值;返回对象。题解:12345678910111213141516171819/****************************************************************

面向对象

使用实义化的对象

挑战1/1 MAKEPERSON

问题:

构建一个称为makePerson的接受两个参数(name和age)的函数,返回一个对象。此函数会:

  1. 创建一个空对象;
  2. 给空对象一个键名为name的属性,键值为输入函数的name参数的值;
  3. 给空对象一个键名为age的属性,键值为输入函数的age参数的值;
  4. 返回对象。

题解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/****************************************************************
                  WORKING WITH OBJECT LITERALS
****************************************************************/
/*** CHALLENGE 1 of 1 ***/
functionmakePerson(name, age) {
// add code here
const innerObj = {};
  innerObj["name"] = name;
  innerObj["age"] = age;
return innerObj;
}
const vicky = makePerson("Vicky", 24);
/********* Uncomment these lines to test your work! *********/
console.log(vicky.name); // -> Logs 'Vicky'
console.log(vicky.age); // -> Logs 24

使用Object.create

挑战1/3 PERSONSTORE

问题:

在personStore对象内,创建greet属性,其值为一个打印“hello”的函数。

题解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/****************************************************************
                       USING OBJECT.CREATE
****************************************************************/
/*** CHALLENGE 1 of 3 ***/
const personStore = {
// add code here
  greet: function () {
console.log("hello");
  },
};
/********* Uncomment this line to test your work! *********/
personStore.greet(); // -> Logs 'hello'

挑战2/3 PERSONFROMPERSONSTORE

问题:

构建personFromPersonStore函数,接受的参数为name和age。当被调用时,此函数会被通过Object.create方法在personStore对象上创建person对象。

题解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*** CHALLENGE 2 of 3 ***/
functionpersonFromPersonStore(name, age) {
// add code here
const innerObj = Object.create(personStore);
  innerObj["name"] = name;
  innerObj["age"] = age;
return innerObj;
}
const sandra = personFromPersonStore("Sandra", 26);
// /********* Uncomment these lines to test your work! *********/
console.log(sandra.name); // -> Logs 'Sandra'
console.log(sandra.age); //-> Logs 26
sandra.greet(); //-> Logs 'hello'

挑战3/3 INTRODUCE

问题:

在不改变上述已写代码的情况下,给personStore对象添加一个用于打印“Hi,my name is [name]”的introduce方法。

题解:

1
2
3
4
5
6
7
8
/*** CHALLENGE 3 of 3 ***/
// add code here
personStore["introduce"] = function () {
console.log(`Hi, my name is ${this.name}`);
};
sandra.introduce(); // -> Logs 'Hi, my name is Sandra'

使用”new“关键词

挑战1/3 PERSONCONSTRUCTOR

问题:

构建PersonConstructor函数。其利用“this”关键词来保存属性到greet作用域上。greet应该是一个打印“hello”字符串的函数。

题解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/****************************************************************
                    USING THE 'NEW' KEYWORD
****************************************************************/
/*** CHALLENGE 1 of 3 ***/
functionPersonConstructor() {
// add code here
this.greet = () =>console.log("hello");
}
// /********* Uncomment this line to test your work! *********/
const simon = new PersonConstructor();
simon.greet(); // -> Logs 'hello'

挑战2/3 PERSONFROMCONSTRUCTOR

问题:

构建personFromConstructor函数,接受参数为name和age。当被调用时,此函数会使用“new”关键词来创建person对象而不是Object.create方法。

题解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*** CHALLENGE 2 of 3 ***/
functionpersonFromConstructor(name, age) {
// add code here
const innerPerson = new PersonConstructor();
  innerPerson.name = name;
  innerPerson.age = age;
return innerPerson;
}
const mike = personFromConstructor("Mike", 30);
/********* Uncomment these lines to test your work! *********/
console.log(mike.name); // -> Logs 'Mike'
console.log(mike.age); //-> Logs 30
mike.greet(); //-> Logs 'hello'

挑战3/3 INTRODUCE

问题:

在不改变上述已写代码的情况下,给PersonConstructor函数添加一个打印“Hi, my name is [name]”的introduce方法。

题解:

1
2
3
4
5
6
7
/*** CHALLENGE 3 of 3 ***/
// add code here
PersonConstructor.prototype.introduce = function () {
console.log(`Hi, my name is ${this.name}`);
};
mike.introduce(); // -> Logs 'Hi, my name is Mike'

使用ES6的类

挑战1/2 PERSONCLASS

问题:

构建PersonClass类。PersonClass应有一个接受name参数并存储为名为name的属性的构造器。PersonClass还应有一个称为greet的方法,用于打印“hello”字符串。

题解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/****************************************************************
                        USING ES6 CLASSES
****************************************************************/
/*** CHALLENGE 1 of 2 ***/
classPersonClass{
constructor(name) {
// add code here
this.name = name;
  }
// add code here
  greet() {
console.log("hello");
  }
}
// /********* Uncomment this line to test your work! *********/
const george = new PersonClass('');
george.greet(); // -> Logs 'hello'

挑战2/2 DEVELOPERCLASS

问题:

构建DeveloperClass类。DeveloperClass类通过扩展PersonClass类来构造对象。除拥有name属性和greet方法外,DeveloperClass还应有个introduce方法。当被调用时,introduce方法会打印“Hello World, my name is [name]”.

题解:

1
2
3
4
5
6
7
8
9
10
11
12
13
/*** CHALLENGE 2 of 2 ***/
// add code here
classDeveloperClassextendsPersonClass{
  introduce() {
console.log(`Hello World, my name is ${this.name}`);
  }
}
/********* Uncomment these lines to test your work! *********/
const thai = new DeveloperClass("Thai", 32);
console.log(thai.name); // -> Logs 'Thai'
thai.introduce(); //-> Logs 'Hello World, my name is Thai'

拓展:子类

挑战1/5 ADMINFUNCTIONSTORE

问题:

构建adminFunctionStore对象,其可以访问userFunctionStore的所有方法,在不将方法逐个于自身内复制的情况下。

题解:

1
2
3
4
5
6
7
const userFunctionStore = {
  sayType: function () {
console.log("I am a " + this.type);
  },
};
let adminFunctionStore = Object.create(userFunctionStore);

挑战2/5 ADMINFACTORY

问题:

构建adminFactory函数,用于创建一个包含userFactory下所有数据域及默认值的对象,在不将数据域逐个于自身内复制的情况下。

题解:

1
2
3
4
5
6
7
8
9
10
11
12
functionuserFactory(name, score) {
let user = Object.create(userFunctionStore);
  user.type = "User";
  user.name = name;
  user.score = score;
return user;
}
functionadminFactory(name, score) {
const admin = new userFactory(name, score);
return admin;
}

挑战3/5 ADMINFACTORY

问题:

然后确保adminFactory中的type‘域的值为’Admin‘而不是’User’。

题解:

1
2
3
4
5
functionadminFactory(name, score) {
const admin = new userFactory(name, score);
    admin.type = 'Admin';
return admin;
}

挑战4/5 ADMINFACTORY

问题:

确保adminFactory对象可以访问到adminFunctionStore对象中的方法,在不全部复制的情况下。

题解:

1
2
3
4
5
6
7
8
9
10
11
12
functionadminFactory(name, score) {
let admin = Object.create(adminFunctionStore, {
    name: {
      value: name,
    },
    score: {
      value: score,
    },
  });
  admin.type = "Admin";
return admin;
}

挑战5/5 SHAREPUBLICMESSAGE

问题:

创建一个打印“Welcome users!”的sharePublicMessage方法,适用于adminFactory对象,但不适用于userFactory对象。请不要在adminFactory中直接添加这个方法。

题解:

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
const adminFunctionStore = Object.create(userFunctionStore, {
  sharePublicMessage: {
    value: function () {
console.log("Welcome users!");
    },
  },
});
functionadminFactory(name, score) {
let admin = Object.create(adminFunctionStore, {
    name: {
      value: name,
    },
    score: {
      value: score,
    },
  });
  admin.type = "Admin";
return admin;
}
const adminTester = new adminFactory("Mike", 89);
adminTester.sharePublicMessage(); // -> "Welcom users!"
console.log(adminTester.type);  // -> "Admin"
const userTester = new userFactory("June", 90);
// userTester.sharePublisMessage();  // -> error!
console.log(userTester.type); // -> "User"
const adminFromFactory = adminFactory("Eva", 5);
adminFromFactory.sayType(); // -> Logs "I am a Admin"
adminFromFactory.sharePublicMessage(); // -> Logs "Welcome users!"

拓展:Mixins

问题:

Mixins是面向对象编程中使对象获得除继承外的方法和属性的工具。在这个挑战中,补充下方代码,使robotFido拥有robotMixin的所有属性。请仅适用一行代码,在不逐个添加属性的情况下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
classDog{
constructor() {
this.legs = 4;
  }
  speak() {
console.log('Woof!');
  }
}
const robotMixin = {
  skin: 'metal',
  speak: function() { console.log(`I have ${this.legs} legs and am made of ${this.skin}`) },
}
let robotFido = new Dog();

题解:

1
2
3
robotFido = Object.assign(robotFido, robotMixin);
robotFido.speak(); // -> Logs "I am made of 4 legs and am made of metal"
相关文章
|
2月前
|
存储 监控 算法
局域网监控其他电脑的设备信息管理 Node.js 跳表算法
跳表通过分层索引实现O(logn)的高效查询、插入与删除,适配局域网监控中设备动态接入、IP映射及范围筛选等需求,相比传统结构更高效稳定,适用于Node.js环境下的实时设备管理。
141 9
|
4月前
|
存储 监控 JavaScript
基于布隆过滤器的 Node.js 算法在局域网电脑桌面监控设备快速校验中的应用研究
本文探讨了布隆过滤器在局域网电脑桌面监控中的应用,分析其高效空间利用率、快速查询性能及动态扩容优势,并设计了基于MAC地址的校验模型,提供Node.js实现代码,适用于设备准入控制与重复数据过滤场景。
217 0
|
2月前
|
存储 监控 JavaScript
企业上网监控系统的恶意 URL 过滤 Node.js 布隆过滤器算法
布隆过滤器以低内存、高效率特性,解决企业上网监控系统对百万级恶意URL实时检测与动态更新的难题,通过概率性判断实现毫秒级过滤,内存占用降低96%,适配大规模场景需求。
258 3
|
2月前
|
存储 监控 算法
电脑管控软件的进程优先级调度:Node.js 红黑树算法
红黑树凭借O(log n)高效插入、删除与查询特性,适配电脑管控软件对进程优先级动态调度的高并发需求。其自平衡机制保障系统稳定,低内存占用满足轻量化部署,显著优于传统数组或链表方案,是实现关键进程资源优先分配的理想选择。
180 1
|
3月前
|
存储 机器学习/深度学习 人工智能
软考中级软件设计师专项-数据结构与算法上篇
软件设计师考试数据结构模块涵盖数组、链表、栈、队列、树、图等基础结构及其操作,重点考查二分查找、快排与归并排序、树/图的DFS/BFS遍历算法,要求掌握时间与空间复杂度分析,理解哈希、堆的应用场景,强调通过合理选择数据结构优化程序性能,解决存储管理与计算效率问题,为系统设计奠定核心逻辑基础。
523 1
软考中级软件设计师专项-数据结构与算法上篇
|
3月前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
259 3
|
7月前
|
监控 算法 JavaScript
基于 JavaScript 图算法的局域网网络访问控制模型构建及局域网禁止上网软件的技术实现路径研究
本文探讨局域网网络访问控制软件的技术框架,将其核心功能映射为图论模型,通过节点与边表示终端设备及访问关系。以JavaScript实现DFS算法,模拟访问权限判断,优化动态策略更新与多层级访问控制。结合流量监控数据,提升网络安全响应能力,为企业自主研发提供理论支持,推动智能化演进,助力数字化管理。
203 4
|
7月前
|
监控 算法 JavaScript
公司局域网管理视域下 Node.js 图算法的深度应用研究:拓扑结构建模与流量优化策略探析
本文探讨了图论算法在公司局域网管理中的应用,针对设备互联复杂、流量调度低效及安全监控困难等问题,提出基于图论的解决方案。通过节点与边建模局域网拓扑结构,利用DFS/BFS实现设备快速发现,Dijkstra算法优化流量路径,社区检测算法识别安全风险。结合WorkWin软件实例,展示了算法在设备管理、流量调度与安全监控中的价值,为智能化局域网管理提供了理论与实践指导。
204 3
|
9月前
|
监控 算法 JavaScript
企业用网络监控软件中的 Node.js 深度优先搜索算法剖析
在数字化办公盛行的当下,企业对网络监控的需求呈显著增长态势。企业级网络监控软件作为维护网络安全、提高办公效率的关键工具,其重要性不言而喻。此类软件需要高效处理复杂的网络拓扑结构与海量网络数据,而算法与数据结构则构成了其核心支撑。本文将深入剖析深度优先搜索(DFS)算法在企业级网络监控软件中的应用,并通过 Node.js 代码示例进行详细阐释。
190 2
|
9月前
|
存储 算法 JavaScript
基于 Node.js 深度优先搜索算法的上网监管软件研究
在数字化时代,网络环境呈现出高度的复杂性与动态性,上网监管软件在维护网络秩序与安全方面的重要性与日俱增。此类软件依托各类数据结构与算法,实现对网络活动的精准监测与高效管理。本文将深度聚焦于深度优先搜索(DFS)算法,并结合 Node.js 编程语言,深入剖析其在上网监管软件中的应用机制与效能。
128 6

热门文章

最新文章