prototype (原型) 属性

web:js函数的prototype(原型对象)属性 JavaScript原型机制是对象继承的核心。每个函数都有一个prototype属性,作为通过该构造函数创建对象的模板。对象通过__proto__属性访问其原型,当访问属性时,会沿原型链向上查找。通过构造函数创建的对象共享原型上的属性和方法,修改原型会影响所有实例。Object.create()可直接指定新对象的原型。所有对象最终都继承自Object.prototype,形成原型链。原型机制实现了属性和方法的共享,减少内存消耗,是JavaScript实现继承的基础方式。 阅读详情

转自:https://www.jianshu.com/p/4f87d28923ce

这篇文章是基于 <<JavaScript 高级程序设计>>第六章面向对象的程序设计 6.2.3原型模式

我们每创建一个函数, 都有一个 prototype (原型)属性, 这个属性是一个指针, 指向一个对象,这个对象的 用途: 包含可以由指定类型的所有实例共享的属性和方法
所以 prototype 就是通过调用构造函数而创建的哪个对象实例的原型对象

function Person() {};
Person.prototype.name = 'TonNi';
Person.prototype.age = 19;
Person.prototype.sayName = function () {
    alert ( this. name );
}

var person1 = new Person();
person1.sayName() // TonNi;

// prototype.isPrototypeOf 判断 person1 实例的原型是不是 Person
console.log (Person.prototype.isPrototypeOf(person1))  // true

//  Object.getPrototypeOf 该方法获取一个对象的原型
console.log(Object.getPrototypeOf(person1) === Person.prototype) // true 
console.log(Object.getPrototypeOf(person1).name) //TonNi

// hasOwnProperty 检测一个实例属性是不是存在与实例中 , 存在返回true
person1.sing = 'i can sing';
console.log(person1.hasOwnProperty('name')) // false 
console.log(person1.hasOwnProperty('sing')) // true 

1: 什么是实例, 什么是原型 ?

以上面的代码为例,
原型: 就是 大写的 Person 函数
实例: 就是以 Person为原型 从新 new 出来的person; 上例中的 person1就是实例

这里我们将 name, age, sayName() 等属性和方法 直接添加到了 Person 的 prototype 中, 这样所有 new 出来的实例 都拥有同样的 属性和方法, 可以被访问或调用. var person2 = new Person() person2 和 person1 一样拥有同样的属性和方法

2: constructor

只要创建一个新的函数, 就会根据特定规则为该函数创建一个 prototype 属性, 此属性指向函数的原型对象
而在默认情况下, 所有的原型对象都会自动获得一个 constructor (构造函数) 属性, 这个属性是一个指向 prototype 属性所在函数的指针.
可以看下图, Person.prototype.constructor 指向的就是 Person

结构

作用:
通过这个构造函数, 我们还可以继续为原型对象添加其他属性和方法

3: 如果实例中和原型都有同名的属性或者方法, 调用哪个呢?

当代码读取某个属性或者方法时, 都会经行一次搜索, 搜索目标是给定的属性或方法的名字. 搜索顺序是, 先从实例查找 , 如果实例中有, 则返回属性值或者调用方法, 如果没有, 则搜索指针指向原型对象, 如果有同上, 如果没有, 属性就返回 undefind, 方法则报错, xxx is not a function

function Person() {};
Person.prototype.name = 'TonNi';
Person.prototype.age = 19;
Person.prototype.sayName = function () {
    alert ( this. name );
}

var person1 = new Person();
console.log(person1.name) //  'TonNi'   实例中没有则去原型中找, 找到后返回属性值,

person1.name = 'Mike'
console.log(person1.name) // Mike 实例中有了name 就直接拿来用了

//在实例化一个person2
var person2 = new Person()
console.log(person2 .name) //  'TonNi'   实例中没有则去原型中找, 找到后返回属性值, 不会因为 person1添加了name收到影响

// 删除person1中的name
delete person1.name;
console.log(person1.name) //  'TonNi'  删除后 实例中没有则去原型中找, 找到后返回属性值,

故当我们为实例添加一个属性时,此属性会屏蔽掉原型中对象中的同名属性, 但是只会阻止我们访问对象原型属性, 并不会修改

4: 关于判断属性或方法是存在实例还是原型中

  • hasOwnProperty() 只有属性或方法 在实例中才为 true
...上面的例子
person1.hasOwnproperty('name');  //  false  不在实例中

person1.name = 'Mike';
person1.hasOwnProperty('name'); // true 在实例中, 返回true
  • in操作符
    无论该属性在实例中还是原型中, 只要能访问到就返回 true
...上上面的例子
'name' in person1 // true;
person1.hasOwnproperty('name');  //  false  不在实例中

person1.name = 'Mike';
'name' in person1 // true;
person1.hasOwnProperty('name'); // true 在实例中, 返回true

'run' in person1; // false 实例和原型都没有 

所以呢, 同时使用 hasOwnProperty() 和 in 就可以确定该属性到底存在对象还是原型中了

function hasPrototypeProperty (object, name) {
  return !object.hasOwnProperty(name) && (name in object);
}

由于 in 操作符只要通过对象能够访问到属性就能返回 true, hasOwnProperty() 只要属性存在实例中才能返回 true, 所以只要 in 返回 true 而 hasOwnProperty() 返回 false 就说明属性在原型中

5: 更简单的原型语法

由于上面例子每添加一个属性就敲一次 Person.prototype 很麻烦, 为了减少不必要的输入, 如下:

function Person () {}
Person.prototype = {
    name: 'Toni',
    age: 19,
    sayName: function () {
        console.log(this.name);
    }
}

缺点1:
按照上面的对象字面量来重写整个原型对象, 最终结果相同, 但是, constructor 属性不在指向 Person, 这里重写了后, constructor 指向了新对象 Object构造函数 不在指向 Person, 尽管 instanceof 还能返回正确的结果, 但是 constructor 已经无法确定对象类型了
如:

//上例
var friend = new Person();
console.log(friend  instanceof Object)// true
console.log(friend  instanceof Person)// true

console.log(friend.constructor == Person) // false  正常的此处应为true
console.log(friend.constructor == Object) // true

改进:
如果你的确需要 constructor属性的话, 可以这样:

function Person () {}
Person.prototype = {
    constructor: Person,     //这里 
    name: 'Toni',
    age: 19,
    sayName: function () {
        console.log(this.name);
    }
}

或者 使用 Object.defineProperty()

function Person () {}
Person.prototype = {
    name: 'Toni',
    age: 19,
    sayName: function () {
        console.log(this.name);
    }
}

Object.defineProPerty (Person.prototype, 'constructor', {
    enumerable: false,
    value: Person
})
  • 第一种方法: 有个问题就是, 把原本 constructor 属性的 Enumerable 设置成了 true 成了可枚举的属性, 原生的是 false 不可枚举
  • 第二中方法, 则是重构构造函数, 直接设置了 enumerable: false, 但是 只适应于 ECMAScript 5 兼容的浏览器

缺点2或者是需注意:
看例子:
例子1

var friend = new Person();    // 先实例化一个Person原型
Person.prototype.sayHi = function () { 
    console.log('Hi')
};                                        // 添加方法

friend.sayHi();  // Hi     没什么问题

例子2:

function Person () {};    //原型

var friend = new Person(); //  紧接着实例化  (注意这里实例的顺序)

Person.prototype = {
    constructor: Person,    
    name: 'Toni',
    age: 19,
    sayName: function () {
        console.log(this.name);
    }
}                                             // 然后在添加属性方法

friend.sayName()              // 报错 friend.sayName is not a function

例子2正确的顺序是:

function Person () {};    //原型

Person.prototype = {
    constructor: Person,   
    name: 'Toni',
    age: 19,
    sayName: function () {
        console.log(this.name);
    }
}                                             // 然后在添加属性方法

var friend = new Person();    //  实例化

friend.sayName()              //  'Toni';

例子错误原因

例子1中, 因为实例与原型中链接的是一个指针, 而非一个副本, 所以不论实例化原型与添加属性方法的顺序如何, 都是可以在原型中获取到

例子2中, 我们先创建一个Person 的一个实例, 然后又重写了其原型对象,
但是, 重写原型对象就切断了现有原型与任何之前已经存在的对象实例之间的联系

6: 原型对象的问题

原型对象的缺点 , 所有的实例都在默认情况下获取相同的属性值, 即共享本性, 虽然这也是其优点, 但是这中共享对于函数非常适合, 对于包含基本值(即 name: 'tom',)的属性还算可以, 但是对于引用类型(Object, Array,String, ...)的属性问题就比较突出了
如:

function Person () {};    

Person.prototype = {
    constructor: Person,   
    name: 'Toni',
    age: 19,
    friends: ['Tom', 'mike', 'Anny'],
    sayName: function () {
        console.log(this.name);
    }
}                                             

var friend1 = new Person();   
var friend2 = new Person();   

console.log (friend2 .friends) //'Tom', 'mike', 'Anny'   正常显示

friend1 .friends.push('Masa');   // 使用实例1 在数组中添加一个人名 

console.log (friend2 .friends) //'Tom', 'mike', 'Anny' ,'Masa'  , person2受到了影响

当然了如果你要的结果就是这样, 那倒无所谓, 如果不是, 都需要单独的属性的话, 就有很大问题,

问题原因自然是由于实例与原型中链接的是一个指针, 指向同一个数组, friend1 对原型的修改, friend2 也会反映出来

7: 所以最好组合是

组合使用 构造函数模式 和原型模式,
构造函数模式用于定义实例属性,
原型模式用于定义方法和共享属性,

// 构造函数, 定义实例属性,  this将作用域指向新对象
function Person (name,age) {
    this.name = name;
    this.age = age;
    this.friends = ['Tom', 'Mike'];
}

//原型模式用于定义方法和共享属性,
Person.prototype = {
    constructor: Person,
    sayName: function () {
        console.log(this.name)
    }
}

var person1 = new Person ('Toni', 19) ;
var person2 = new Person ('Anny', 18);

person1.friends.push('An');
console.log(person1.friends);  // 'Tom', 'Mike','An'
console.log(person2.friends) ; //  'Tom', 'Mike', 

例子中, 实例属性都是在构造函数中定义的, 而由所有实例共享的属性 construction 和 方法 sayName 都是在原型中定义的, 因而, 修改 person1.friends 数组, 只是修改实例中的数组, 没有修改共有属性,, 所以其他实例不会受到影响



作者:有情怀的程序猿
链接:https://www.jianshu.com/p/4f87d28923ce
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

C#报表,使用微软rdlc模板,生成Excel, PDF, Word, Image文件,使用自定义对象做数据集不连接数据库 我项目是用vs2017 建的,.NET farmwork 4.7.2 这种报表可以用于任何模式的应用,web,桌面,因为这只是生成一个文件或者文件流 步骤比较详细啰嗦,其中有讲到rdlc怎么新建设计,如果已经会设计rdlc了的可以直接跳到底部看代码的执行结果, 底部还有源码下载链接,百度盘 首先控制台安装报表包 新建rdlc 报表 建立rdlc里要用的数据模型 模型建完,或者修改都要重新... 阅读详情

相关推荐

告别零碎资料!手把手教你搞定ASTER L1T数据的预处理全流程(附ENVI实操)

本文详细介绍了ASTER L1T数据的预处理全流程,包括数据获取、质量检查、ENVI实操步骤(辐射定标、大气校正、几何精校正)以及热红外波段深度处理。特别适合地信领域初学者和研究人员,帮助快速掌握ASTER L1T数据处理技巧,提升定量反演研究效率。

weixin_30385925的博客 356

构造函数的属性:静态属性、原型属性、实例属性

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:以下是本篇文章正文内容,下面案例可供参考 一、静态属性 静态属性是对象的私有属性,只能通过 (类名.属性) 的方式访问,而实例是无法访问的 function Foo(name) { this.name = name; } // 在构造函数上添加静态属性 Foo.getName = function () { console.log("这里是静态属性"); }; const f1 = new Foo("f1"); .

weixin_44196394的博客 1291

Origin科研绘图——桑基图

是一种用于展示“流动”(flow)关系的可视化图表,常用于呈现能量流、物质流、资金流、信息流等在不同节点之间的传递和分配情况。它最大的特点是用“宽度可变的流线”来直观表示数量大小——流线越宽,代表流量越大,因此特别适合理解复杂系统中资源从哪里来、到哪里去、以及不同路径所占比例。为该流程对应的数量。只需将各个流程逐项填写在 A、B、C 三列即可,流程的排列顺序并非关键,确保起点、终点及对应数值准确才是最重要的。与柱状图、饼图不同,桑基图不仅展示“多少”,还展示“从哪到哪”。至此,本期教程就结束啦。

weixin_41301530的博客 1394

Prototype属性说明

1、prototype的定义 javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用。 每一个构造函数都有一个属性叫做原型。这个属性非常有用:为一个特定类声明通用的变量或者函数。 你不需要显式地声明一个prototype属性,因为在每一个构造函数中都有它的存在。你可以看看下面的例子: function Test(){} alert(Test.prototype); // 输出 "Object" 1.1、 原型

xiiii的专栏 3491

动态知识图谱构建:从本体论到工程实践

知识图谱作为语义网和人工智能领域的核心技术,旨在通过结构化的方式表示和组织知识。其核心原理在于将实体、概念及其关系建模为图结构,从而支持复杂的语义推理和关联查询。这一技术为机器理解数据间的深层联系提供了基础,在智能推荐、企业知识管理和学术研究等领域具有重要价值。通过结合自然语言处理(NLP)和图数据库技术,系统能够从非结构化数据中自动抽取知识,并构建动态演化的认知网络。本文以“本体论章鱼”项目为例,探讨了如何实现从静态本体到动态知识网络的范式转变,并详细解析了其分布式感知、适应性学习的架构设计,为构建灵活可

weixin_30731305的博客 660

MYSQL、ORACLE、PostgreSQL数据库对象层次及权限管理对比

本文为出于自己扩展、比较、图形化的思维路径自行总结归纳,可能有些细节不太准确,欢迎指正。MySQL、Oracle、PostgreSQL关系型数据库都有管理员用户、用户、权限管理、表函数索引等数据库对象,schema。但在数据库对象隶属层次上有差异和相同的地方。

rachel_2016的博客 1490

JavaScript高级-原型与原型链、原型属性问题

而在将fun2的a设置为2后,fun1.a的值未变化,这是因为设置时不会查找原型链,如果对象没有该属性,则会直接将属性添加,并设置值,所以fun2.a是fun2中自带的属性,而fun1.a还是Fun.prototype中的a.函数的原型对象指向的空object对象都是通过new Object得到的,而构造函数也都是通过new Function得到的,而互相的隐式原型与显式原型都有相应的关系,于是构成了原型链。函数的prototype属性指向原型对象,其原型对象的constructor属性指向原函数。

wandongle的博客 1577

通过HTTP的方式克隆GitHub上的项目

通过HTTP的方式克隆GitHub上的项目 打开想要下载的项目的网页链接,点击Clone or download绿色的按钮,进行如下步骤实现通过HTP的方式下载项目。 点击红色框圈出的位置: 打开想要存放项目的文件夹,在空白处点击鼠标右键,选择Git Bash Here,打开命令行。 输入git clone 复制的下载地址,回车进行下载。 4.正在下载的界面 5.下载完成。 技多不压身 哦耶✌✌✌ ...

weixin_37826412的博客 3204

再谈一次什么是原型

1 - 原型是什么? 1.1 - 原型指的是原型属性,原型也是一个对象。 原型指的是两个原型属性: prototype: 显示原型属性 _proto_: 隐式原型属性 所有函数都有显示原型属性。 它的值叫做原型对象,这个原型对象默认有两个属性: constructor 指向函数本身 _proto_ 指向Object.prototype 特殊: Object.prototype._pro...

拎着蜗牛跑的壳儿 3万+

CentOS 7 安装 Python 3.10

我这里已经软链接了,正常未链接之前是python->python2.7而不是python3.10。python2.7默认安装是在 /usr/bin目录中,切换到/usr/bin/更改yum配置,因为其要用到python2才能执行,否则会导致yum不能正常使用。2. 安装 Python 3.10 必需的 openssl >= 1.1.1。默认的centos7是没有安装pip,先添加epel扩展源。/usr/bin/python 修改为如下。添加软链接,将原来的链接备份。添加python3的软链接。

bensonyang888的博客 2905

innovus:ccopt_design流程

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?spec文件可以只创建一次,无需多次创建。2)virtual balance阶段。3)Full Balancing阶段。4)Clock Routing阶段。1)clustering阶段。

m0_61544122的博客 2477

知识总结:什么是原型、原型对象、原型链?原型链如何继承?如何访问原型对象上的属性?属性的访问规则是什么?如何设置原型对象的属性?

1、隐式原型和显示原型JavaScript 的所有对象中都有一个原型,称为隐式原型(__proto__)。隐式原型指向构建出这个实例的类的显示原型(prototype)。this.major = '语文'Student.prototype.type = '学生'let student = new Student('小草莓')console.log('对象的隐式原型:student.__proto__', student.__proto__)

小草莓的博客 2824

(四)美赛画图篇:画图模板+画图工具

美赛画图篇:画图模板+画图工具(一)画图模板(二)画图工具 因为散点图、折线图等多与数据有关,且需相关软件生成,故此处多是通用模板。直接替换文字内容即可。 (一)画图模板 1、Visio圆圈图 适合于:指标体系(E题常用) 点击下载:1 C币 如果不想花费且时间充足,悄咪咪地说,在visio-模板搜索可以找到很多。(稍微会耗一点时间) 2、简单指标体系图PPT 适合于指标体系 点击下载:0 C币...

weixin_43689393的博客 1万+

深入理解javascript中函数的prototype属性(原型)

函数的prototype属性 一、 只要我们创建一个函数,该函数就会自动获得一个prototype属性,这个属性指向函数的原型对象。 创建fn函数自动获得prototype属性,该属性是一个对象即该函数的原型对象,我们可以看到原型对象默认会有一个constructor属性,该属性是指向函数自身即fn。 二、 函数的prototype属性是一个对象 typeof fn.protot

CJF的博客 7624

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

prototype 原型类型属性

function Fish(name, color){ this.name=name; this.color=color; } Fish.prototype.livesIn="water"; Fish.prototype.price=20; var fish1=new Fish("mackarel", "gray"); var fish2=new Fish("goldfish", ...

baidu_19552787的博客 423

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

函数的prototype属性、显示原型和隐式原型属性

1. 函数的prototype属性: (1) 每个函数都有一个prototype属性,它默认指向一个Object空对象(即称为:原型对象) * * fu'n (2)原型对象中有一个constructor,他指向函数对象 * 检查方法: console.log(Date.prototype.constructor) === Date) // true console.log(Fun.prototype.constructor) === Fun)// true 2. 给原型对象添加属性.......

m0_52545254的博客 1406

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

js中的原型prototype,js中的私有属性与公有属性

原型prototype(公有属性) 我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype 这个属性对应着一个对象,这个对象就是我们所谓的原型对象 如果函数作为普通函数调用prototype没有任何作用 当函数以构造函数的形式调用时,他所创建的对象中都会有一个隐含得属性,指向该构造函数的原型对象,我们可以通过______proto__来访问该属性 原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,我们可以将对象中共有的内容,统一设置到原型对象中 当我们访问对象的一

xing_kai_kai的博客 660

彻底理解js中的原型对象和prototype属性

prototype(函数的原型属性) prototype 是一个指向该实例所使用的原型对象的【指针】 prototype 是几乎所有的函数(除了某些内建函数)的属性 prototype 不是一个实例的属性,因为实例是对象,不是函数 //prototype是函数的属性 console.log(Array.prototype.reduce.prototype);//undefined consol...

龙旗飘扬的舰队 1180

js中的原型(prototype)属性

利用原型添加属性和方法 首先我们创建一个构造器函数: function Gadget(name,color){ this.name=name; this.color=color; this.whatAreYou=function(){ return "I am a "+this.color + " "+this.name; }; }; 添加属性和方法的另一种形式,通过构造器函数...

u012773082的博客 1118

函数的prototype属性(原型对象)

每个函数都有一个prototype属性,它默认是一个空的Object的实例对象(即称为:原型对象),而原型对象中有一个属性constructor,它指向函数对象。这说明(构造)函数和它的原型对象相互引用。Type表示的是构造函数,它其中有个属性prototype,而这个属性指向这个函数的prototype对象,而这个对象有个属性constructor,它是指回这个构造函数Type的,即是相互引用关系。① 每个函数function都有一个prototype,即显式原型 ② 每个实例对象都有一个__prot

JJ_Smilewang的博客 3003

显示原型属性prototype、隐式原型属性__proto__、原型链

原型可以放一些属性和方法,共享给实例对象使用。都有prototype属性,称之为原型;因为这个属性的值是个对象,也称为原型对象。**都有__proto__属性。,最顶层找不到则返回null。

PNPYY的博客 257

constructor属性、__proto__属性、prototype属性、原型链

1、历史 面向过程编程语言:汇编语言、c语言 面向对象编程语言:c++,java,javascript、C# 2、思想        现在有这样一个问题:        有一辆车,时速60km/h,那么它要多久能走完1000km的路? (1)使用面向过程的编程思想: var hours = 1000 / 60; console.log(hours); (2)使用面向对

weixin_41364246的博客 478

JavaSctipt之prototype原型深入分析: prototype的属性是副本,引用,还是固定的查找方式?

JavaSctipt之prototype原型深入分析: prototype的属性是副本,引用,还是固定的查找方式? // JavaSctipt之prototype原型是什么原理呢?实例被创建时,它是复制原型,得到原型属性的副本,还是使实例的属性引用原型的属性值, 还是实例被创建时,根本任何没有与原型同名的属性,仅靠"向原型查找"这种固定方式访问原型呢? 请看例子分析

irelandken的专栏 3128

js高级:原型prototype属性

1、函数的prototype属性。自动拥有原型中的属性(方法)原型上的方法给实例用的。属性,它默认指向一个。:函数的所有实例对象。

weixin_47295886的博客 250

Prototype属性 原型链

原型链:查找方法属性时候,沿着链上来逐步查找,1.prototype => 2.prototype=>3.prototype...__proto__ 充当桥梁,指向 .Prototype// 现在用:getPrototypeOf()其中的Prototype充当仓库,存储共用的函数,属性。包含 constructor (指向自身)alice 实例 (name: 'Alice')从自身逐步到祖辈,直到null。

2301_79969078的博客 220

js原型之prototype属性详解

js中的对象都是属性组成的,属性是键值对的形式,不同于java语言,js中创建的对象是活的, 其中可以同时放各种类型的数据,例如函数,数值,布尔类型,字符串。   函数就是对象,每一个函数都有一个prototype属性 (1)函数名.prototype指向函数的原型对象(函数的prototype属性的值就是函数的原型对象) (2)这个原型对象中有一个constructor属性,属性值指向...

qq_40135955的博客 328
上一篇: js settimeout()
下一篇: tp5系列一tp5多应用修改
wiscourper_
博客等级 码龄17年 1641粉丝 272原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值