Javascript继承

Android应用开发从零到一:基于Kotlin与Jetpack Compose的完整实践指南 移动应用开发的核心在于构建一个架构清晰、可维护且可扩展的应用基础。理解应用架构的原理,如关注点分离和数据驱动UI,是实现高质量应用的关键技术价值。在现代Android开发中,Kotlin语言凭借其空安全特性和协程,能有效提升代码的健壮性与开发效率。Jetpack Compose作为声明式UI框架,代表了UI开发的未来方向,与Kotlin协程深度集成,简化了复杂交互界面的构建。这些技术共同服务于个人任务管理、企业工具等多种应用场景。本文以构建一个完整的个人任务管理应用为例,系统阐述从环境搭建、UI构建、数据持 阅读详情

继承

前言

原型是’Javascript’中的继承的基础,JavaScript的继承就是基于原型的继承。

ES6的继承

        class Box{
            constructor(){

            }
            play(){

            }
        }
        class Ball extends Box{
            constructor(){
                super();
            }
        } 



​

ES5的继承

如果把父类的实例化对象放在子类的原型下就叫继承

eg:

    var obj={...};
        var o=Object.create(obj);
        console.log(o);
o的原型链,就是Obj的原型


    var b=new Box(); 
      var o=Object.create(b);
实例化对象的原型链,就是类的原型
即o的原型链,就是Box的原型

如果是基类,可以直接这样写,但是后面还必须重新定义constructor为当前类的构造函数
如果不是基类,就不能直接使用prototype重设置对象

 
         function Box(_r){
            this.r=_r;
            console.log("aa");
        }
        Box.a=3;
        Box.run=function(){
            console.log(Box.a);
        }
        Box.prototype.b=10;
        Box.prototype.play=function(){
            console.log(this.b);
        }
           以上是ES5的面向对象的写法。
          

那一下这种写法可以吗?
答:不完全正确!

Box.prototype={
        b:10,
        play:function(){

         }
     }
ES5的类中,只要创建这个类以后,就会自动有一个原型,自动具备。
     // 如果是基类,可以直接这样写,但是后面还必须重新定义constructor为当前类的构造函数
        // 如果不是基类,就不能直接使用prototype重设置对象
      Object.defineProperty(Box.prototype,"constructor",{
             value:Box
         })
补上constructor即可

如果把父类的实例化对象放在子类的原型下就叫继承

组合式继承(对象冒充)

有问题的,错误的, 超类的构造函数被执行两遍,这种继承适合于超类的构造函数中没有任何语句

function a(){
    this.name = 'a';
}
a是超类
a.prototype.play  =function(){
    console.log(this.name);
}
function b(){
    this.name = 'b';
    a.prototype.play.call(this)//冒充
}
b是子类,a的构造函数被执行了两两遍。
b()

原型继承

这种方式虽然不执行两遍超类的构造函数,但是一边都没有执行,只完成了原型的继承。

     function F(){

        }
        F.prototype=Box.prototype;
F继承了Box的所有属性,除了构造函数以外,都是被继承的,都和Box一样。
        function Ball(){

        }
        Ball.prototype=new F();
这里Ball的构造函数是自身的构造函数,直接继承的了F。
        var b=new Ball();
        console.log(b); 

Object.creat()的继承

但是这种继承的写法只能用于IE9版本以上的浏览器。(Object.creat()要求)

function Ball(_r){
    Box.call(this,_r)
}
Ball.prototype = Object.create(Box.prototype);
var b = new Ball;

寄生式继承


    function extend(subClass,supClass){
        function F(){}
        F.prototype=supClass.prototype;
        // subClass.prototype=new F();
        // Object.assign(subClass.prototype,new F());
        var o=subClass.prototype;
        subClass.prototype=new F();
        // 复制原来的原型下的所有内容
        if(Object.assign){
            // 如果Object.assign可以使用时
            Object.assign(subClass.prototype,o);
        }else{
            // Object.getOwnPropertyNames可以使用时
            if(Object.getOwnPropertyNames){
                var names=Object.getOwnPropertyNames(o);
                for(var i=0;i<names.length;i++){
                    Object.defineProperty(subClass.prototype,names[i],Object.getOwnPropertyDescriptor(names[i]));
                }
            }else{
                for(var prop in o){
                    subClass.prototype[prop]=o[prop]
                }
            }
        }
        subClass.prototype.constructor=subClass;
        subClass.prototype.superClass=supClass
        if(supClass.prototype.constructor===Object){
            supClass.prototype.constructor=supClass;
        }
  
    } 
3小时学会AI建站!无需编程,个人简历独立站开发速成指南 3小时学会AI建站!个人简历独立站开发速成指南 阅读详情

相关推荐

告别机载网络通信混乱:利用ARINC825的LCC与带宽管理机制构建高可靠CAN总线

本文深入探讨了ARINC825规范如何通过逻辑通信通道(LCC)和带宽管理机制解决机载CAN总线通信的混乱问题。文章详细解析了ARINC825的核心架构设计、LCC工程实现、时间触发带宽管理等关键技术,展示了其在提升航空电子系统可靠性和实时性方面的显著效果,为现代飞机通信系统提供了高可靠解决方案。

weixin_26878995的博客 241

我对JS的继承的理解

js的原型继承原型链是实现js继承的主要方法,他的原理是让利用原型让一个引用类型继承另一个引用类型的属性和方法。如果我们让一个原型对象等于一个实例,那么,此时的原型对象将包含指向另一个原型的指针假如另一个原型又等于一个对象的实例,如此一层套一层,这就是原型链的基本概念。下边是一个简单的例子 var Parent = function(){ this.name = 'parent

jyd820226378的博客 3725

74HC165级联踩坑实录:STM32读取32路开关状态,时序调试与常见问题排查

本文详细介绍了74HC165级联在STM32读取32路开关状态时的时序调试与常见问题排查。从硬件设计的PCB布局优化、电源噪声控制,到软件时序的精确调校和数据采集策略,提供了完整的解决方案。通过逻辑分析仪和示波器的高效使用,解决了信号延迟和干扰问题,最终实现了稳定可靠的32路信号读取。

weixin_34046298的博客 313

深入理解javascript的5种继承方式

1.构造函数式 function Super(){ this.colors = ['c','a','b']; this.print = function(){ console.log(this.colors); } } function Sub(){ Super.call(this);

章鱼小丸子 3595

【新手必看】挖漏洞流程指南,黑客手把手教你挖漏洞月入过万!收藏这篇就够了!(附学习笔记)

【新手必看】挖漏洞流程指南,黑客手把手教你挖漏洞月入过万!收藏这篇就够了!(附学习笔记)【新手必看】挖漏洞流程指南,黑客手把手教你挖漏洞月入过万!收藏这篇就够了!(附学习笔记)

weixin_57514792的博客 1105

小红书图文AI创作:输入主题,一键生成图文(coze工作流教程+获取)

输入主题,工作流一键生成小红书风格图文,30s一条,可批量生成

2301_79384090的博客 2799

【JavaScript】js中的原型继承

js中的原型继承

南栀的博客 3705

Workbench-nCode下发动机引擎应力疲劳分析

在工程数据库中定义材料模型参数,结构场分析基本参数:密度7850Kg/m3、弹性模量210E9Pa、泊松比0.3,疲劳分析参数:应力-疲劳曲线表(S-N Curve),应力-疲劳曲线如下图2所示,如果没有合适的数据可使用结构钢材料进行分析。网格为四面体高阶单元,各零件的单元尺寸如下表1所示,单元质量分布如下图3所示。在workbench平台下搭建分析流程如下图6所示,前述设定完成后,提交求解后即可得到相应的应力、应变结果,更新结果后目录树中会有相应的nCode DesignLife插件,如下图7所示。

ansysxuexizhe的博客 1547

JS的继承 ES5;javascript的继承;

基础概念 说继承之前简单介绍一下,几个概念,有助于更深刻的理解继承。 能用口述或者文字的形式,说一下什么是函数吗? 按照犀牛书的说法,函数简单的说就是重复执行的代码块。函数是这样的一段JavaScript 代码,它只定义一次,但可能被执行或调用任意次。 //使用方式 //1.直接声明 function(){} //2.函数表达式 let fun = function(){} //3. new Function() var fun1 = new Function (arg1 , arg2 ,arg3 ,…

HeMister的博客 1174

零停机更新黑科技:Spring Boot应用实现无缝升级的实战指南

本文介绍了基于Spring Boot和Tomcat实现零停机更新的技术方案,通过动态端口切换和优雅关闭机制,确保服务更新过程中业务不中断。文章详细解析了核心原理,包括内嵌Tomcat的工作机制、零停机更新的三大技术基石(端口动态切换、优雅关闭和进程接管)。同时提供了完整的Java实现代码,重点展示了端口动态检查、参数动态调整、旧进程优雅终止等关键逻辑。该方案适用于高可用系统升级场景,能够有效避免传统部署方式导致的服务中断问题,实现100%无感知的应用更新。

墨夶的博客 818

大数据利器Hadoop:从基础到实战,一篇文章掌握大数据处理精髓!

在当今大数据时代,数据量的爆炸式增长对企业和技术提出了前所未有的挑战。如何高效地存储、处理和分析这些庞大的数据集,成为了亟待解决的问题。Hadoop作为一种分布式计算框架,应运而生,为大数据处理提供了有效的解决方案。Hadoop是一个由Apache软件基金会维护的开源项目,它基于Google的分布式文件系统(Google File System,GFS)和MapReduce计算模型设计。Hadoop的主要目标是处理大规模数据集,它可以在普通硬件集群上运行,从而降低了大数据处理的成本。

邓邓子的博客 8279

[JavaScript]js有哪些继承方式

js继承的方法 想要继承,就必须先提供一个父类,这里以Person来作为父类举例 function Person(name){//给构造函数添加了参数 this.name=name; this.sex="male"; this.say=function(){ console.log(this.name); } } Person.pr

DaftJayee的博客 501

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

javascript继承、js继承实现方式、js继承优缺点

有如下父类 function People(name,age){ this.name = name this.age = age this.seelp = function(){ console.log('i am seelp') } } People.prototype.eat = function(){ console.log('i can eat') } 原型链继承 原理: 子类 的 prototype = 父类 的 实例 优点: 简单 不占

xiao_yu_liu的博客 266

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JavaScript(十七)JS的四种继承方法

JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一。JS面向对象知识中,继承是比较难比较抽象的一块内容,而且实现继承有很多种方法,每种方法又各有优缺点,需要对面向对象知识中的对象、原型、原型链、构造函数等基础知识掌握透彻,下面我们介绍四种继承的方法:原型链继承,构造继承,实例继承,组合继承。 既然要实现继承,那么首先我们得有一个父类,代码如下: /*先定义一个父类对象*/ ...

We_jia的博客 253

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

JS实现继承 JavaScript

JS实现继承 JavaScript 定义一个父类: // 定义一个动物类 function Animal (name) { // 属性 this.name = name || ‘Animal’; // 实例方法 this.sleep = function(){ console.log(this.name + ‘正在睡觉!’); } } // 原型方法 Animal.prototype.eat =...

hellogril前端库 151

javaScript---js如何实现继承

js实现继承的方法:构造函数继承、原型链继承、组合继承、class继承、实例继承 、拷贝继承 、寄生组合继承。

maidu_xbd的博客 735

js之三种继承方式

我要成为这次疫情期间,最闲得码农!!!! 一、为什么要有JS继承 假如每一个实例对象,都要有自己的属性和方法的副本。这不仅无法做到数据共享,也是极大的资源浪费。(这就和我们现实中会继承父母的资产一样,你是可以选择不继承的,但是浪费钱啊) 二、JS继承的三种方式 1.原型继承 //构建一个父类 function Person(name) {...

weixin_44395929的博客 501

【JavaScript】js中如何实现继承?

下面以一张图作为总结:通过来划分不同的继承方式,最后的寄生式组合继承方式是通过组合继承改造之后的最优继承方式,而extends的语法糖和寄生组合继承的方式基本类似。

一个前端开发者 319

JavaScript对象继承新纪元:js-dejavu深度指南

JavaScript对象继承新纪元:js-dejavu深度指南 项目介绍 js-dejavu 是一个面向JavaScript开发者的强大库,旨在简化原型继承模型,引入经典继承模式,使得在JavaScript中实现面向对象编程更为直观与高效。对于那些习惯了Java、ActionScript 3.0等语言的对象继承机制的开发者来说,它提供了一种过渡到JavaScript复杂原型链世界的桥梁。js-de...

gitblog_00859的博客 1375

JavaScript 继承 | 我学到的JS五种继承方式

文章目录1. 构造继承1.1 构造继承的优点1.2 构造继承的缺点2. 原型继承2.1 原型链继承的优点2.2 原型链继承的缺点3. 复制继承3.1 复制继承的优点3.2 复制继承的缺点4. 组合继承4.1 组合继承的优点4.2 组合继承的缺点5. 寄生组合继承(完美级)5.1 寄生组合继承的优点5.2 寄生组合继承的缺点6 学习小结 1. 构造继承 核心思想:在子类的构造函数中通过call()函数或apply()函数改变this的指向,调用父类的构造函数,实现继承效果 // 示例代码 // 父类 f

是希望的博客 215

Ring.js - JavaScript 中的多继承类系统

Ring.js - JavaScript 中的多继承类系统 1. 项目基础介绍及主要编程语言 Ring.js 是一个开源的 JavaScript 类系统,支持多继承。它旨在让开发者能够以类似于 Java、Python 等传统面向对象编程语言的方式,在 JavaScript 中实现类和继承机制。项目主要使用 JavaScript 编写,同时包含一些 HTML 和 YAML 文件以支持文档和自动化测试...

gitblog_00906的博客 354

JavaScript强化教程——Cocos2d-JS中JavaScript继承

本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程 —— Cocos2d-JS中JavaScript继承   JavaScript语言本身没有提供类,没有其它语言的类继承机制,它的继承是通过对象的原型实现的,但这不能满足Cocos2d-JS引擎的要求。由于Cocos2d-JS引擎是从Cocos2d-x演变而来的,在Cocos2d-JS的早期版本Coc

bright_mmmmmmmmmmmm的专栏 451

javaScript-js的继承

javaScript-js的继承组合继承寄生组合式继承(常用) 组合继承 组合继承(组合原型链继承和借用构造函数继承)(常用) function Person(name){ this.name = name this.drop = function(){ console.log(this.name + " 跳下去"); } } Person.prototype.say = function(){

weixin_47402645的博客 221
下一篇: react context组件传值
Boriska1996
博客等级 码龄7年 22粉丝 77原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值