js基础05_js类、原型对象、原型链&案例(解决无限debugger)

1、prototype

一般用来解决js中的类,用于添加方法

【注意】一般可以用如下来在js对象中添加方法,但是这个是有个严重的问题。比如创建其他类多了,那么就会导致,每次创建一个对象都要创建这个方法,如果有100甚至更多对象,那么创建更多的方法就会浪费内存

javascript 复制代码
// 问题:
// 1. 方法呢?
// 2. 类呢?
function Person(name, age){
    this.name = name;
    this.age = age;
    // 这样写是有很大问题的, 如果Person的方法有100个. 意味着, 每创建一个对象, 方法就要完全重新复刻一遍
    this.chi = function(){ // ?
        console.log(this.name, "在吃东西");
    }
}

所以引出概念prototype,这个就是js中的类,我们在类里面创建方法而不是对象

js继承:A继承自B

javascript 复制代码
// A.prototype.__proto__ = B.prototype
function.Animal(){
}
function.Cat(){}

Cat.prototype.__proto__ = Animal.prototype;

var c = new Cat();
c.chi()

为什么Function无法解决无限debugger的问题,如下图:

原因如下图

所以正确的改法如下:

javascript 复制代码
// // 用原型链可以解决无限debugger的逻辑
// // 用哪个, 改哪个
// Function.prototype.constructor = function(arg){
//     arg = arg.replaceAll("debugger;", "");
//     arg = arg.replaceAll("debugger", "");
//     return new Function(arg);
// }
相关推荐
Persistent的粽子!16 分钟前
C++:类与对象(二)
开发语言·c++
Dreams°12320 分钟前
【Java后端+Vue前后端分离:内网正常、公网访问异常|5个高频经典踩坑完整复盘】
java·开发语言·vue.js
.YM.Z1 小时前
C++ STL 容器深度剖析:vector 与 list 的模拟实现及对比
开发语言·c++·vector·list
lsylalalala1 小时前
多线程(4)
java·开发语言·多线程
小白不想画工图1 小时前
银河麒麟V10系统安装QT5.12
linux·开发语言·qt·银河麒麟
2601_962097482 小时前
JavaScript 异步编程
javascript·ajax·回调函数·异步编程·子线程
全栈项目管理程序猿2 小时前
ArcGIS JS 基础教程(18):SceneLayer 场景图层
javascript
leoZ2312 小时前
第 2 篇:搭建地基——Vue3 + Vite + Tailwind v4 + shadcn-vue
前端·javascript·vue.js·人工智能·目标检测·数据挖掘·语音识别
IT_Octopus2 小时前
JSON 日志里的 `{“$ref“:“$.xxx“}`:从 fastjson 兼容包到原生 fastjson2 的迁移实录
开发语言·python·json
geovindu2 小时前
python:HandWriting Recognition using paddlepaddle
开发语言·后端·python·paddlepaddle