JS原型
原型与类
类是一个抽象的,可以构造对象,就是一个抽象到具体的过程。一般用new。
原型:是一个具体到具体的过程。
使用现有的对象,去构造一个新的对象。
有两种方法从原型来构造对象。
(1) Object.create();
Object.create(proto, [propertiesObject])
- proto 一个对象,作为新创建对象的原型。
- properiesObject 对象的属性定义。
每个实例对象都有一个 __proto__属性指向原型,公用其中的方法和属性。
这个属性是一个隐私属性,不可以被修改。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <script type= "text/javascript" > var A = { name : 'aaa' , start : function () { console.log( '%s start ' , this .name); }, end : function () { console.log( '%s end ' , this .name); } } var aaa = Object.create(A); aaa.start(); <strong> // aaa start</strong> aaa.logo = 'first' ; //创建新的属性 var bbb = Object.create(A); bbb.start(); <strong> // aaa start</strong> bbb.logo = 'second' ; console.log(aaa.logo + " " + bbb.logo); <strong> // first second</strong> </script> |
(2) 构造函数
函数有一个prototype属性。
使用构造函数创建对象,每个对象都有一个原型,就是prototyoe这个属性。
用new创建对象,就是构造函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | function Person (name) { this .name = name; } Person.prototype = { start : function () { console.log( '%s start' , this .name); }, run : function () { console.log( "%s is running..." , this .name); } } var lily = new Person( 'lily' ); var tom = new Person( 'ton' ); lily.run(); //lily is running... tom.run(); //ton is running... |
new 创建一个对象分为三步。
(1)首先,创建一个lily的Person的对象
(2)设置lily的_porto_的这个属性,指向Person.prototype。
(3)Person.call(lily, arguments);使用Person类去初始化lily对象。(看,这里最后还是用call来改变this创建对象的。)
型链--实例
对象的原型链从最下层的对象,到最高的Object.prototype,截至。
并且就近原则。找到最近的进行操作。
对象的操作,无论是修改还是删除属性,都不会对原型上面进行影响。
hasOwnProperty:方法,来源于Object.prototype上面。
判断传入的属性是不是对象自身的属性。
传入的属性如果返回时假,要么属性在原型上面,要么不存在。
lily.hasOwnProperty('name'); // true
lily.hasOwnProperty('logo'); // false
函数也是对象 来源于 Function() { }
而Function自己也有_proto_ , 最终指向Object.prototype.
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单