本文实例讲述了 设计模式之原型模式。分享给大家供大家参考,具体如下:
从设计模式的角度讲,原型模式是用于创建对象的一种模式,若需要创建一个对象,一种方法是先指定其类型,然后通过类来创建这个对象,另一种方法是通过原型来创建,不必关心对象的具体类型,而是找到一个对象,然后通过克隆来创建一个一模一样的对象。
ES5提供了 .create(obj)方法来克隆对象,在不支持 .create(obj)方法的浏览器中,可以使用以下代码:
.create = .create || function(obj) {
function Func() {};
Func.prototype = obj;
return new Func();
}
一、 中的原型继承:
1. 大部分的数据都是对象;
有两种类型机制:基本类型和对象类型。基本类型包括undefined、number、boolean、string、function、 。
设计者的本意在于,除了undefined,一切都应该是对象,为了实现这一目标,number、boolean、string这几种基本数据类型通过对应的包装类Number、Boolean、String来变成对象类型数据。
中的根对象是 .prototype对象, .prototype对象是一个空的对象。 的每个对象,实际上都是从 .prototype对象克隆而来的, .prototype对象就是它们的原型。
ES5提供了getPrototypeOf来查看对象的原型, .getPrototypeOf(任何对象) == .prototype都会返回true。
2. 要得到一个对象,不是通过实例化类,而是找到一个对象作为原型并克隆它;
没有类的概念,new运算符后面的不是类,而是构造器。当使用new运算符来创建对象时,实际上也是先克隆 .prototype对象,再进行一些额外操作的过程。
3. 对象会记住它的原型;
其实不能说对象有原型,而只能说对象的构造器有原型。 给对象提供了一个名为__proto__属性,默认指向它的构造器的原型,__proto__属性是对象与构造器的原型联系起来的纽带,如:person.__proto__ == Person.prototype。
4. 若对象无法响应某个请求,它会把该请求委托给它自己的原型。
这是原型继承的精髓,当一个对象无法响应某个请求时,会顺着原型链把请求传递下去,直到遇到一个可以处理该请求的对象为止。但是,原型链并不是无限长的,只会查找到 .prototype对象为止,由于 .prototype的原型是null,因此请求无法找到可以处理的对象,返回undefined。
二、原型继承的未来
使用 .create来实现原型继承似乎更能体现原型模式的精髓,但是,通过 .create创建对象的效率并不高,通常要比通过构造函数创建对象慢。
ES6带来了新的Class语法,这让 看起来像是一门基于类的语言,但背后仍然是通过原型机制来创建对象。
class Person {
constuctor(name) {
this.name = name;
}
getName() {
return this.name;
}
}
class Student extends Person {
constuctor(name) {
super(name);
}
sayHello() {
alert(“Hello”);
}
}
var student = new Student(“Alice”);
student.sayHello();
更多关于 相关内容可查看本站专题:《 面向对象入门教程》、《 切换特效与技巧总结》、《 查找算法技巧总结》、《 错误与调试技巧总结》、《 数据结构与算法技巧总结》、《 遍历算法与技巧总结》及《 数学运算用法总结》
希望本文所述对大家 程序设计有所帮助。
继续阅读与本文标签相同的文章
阿里AI赛道明星班(视频)
-
5G时代,家庭光纤必定提速,速率提升到千兆级别!
2026-05-15栏目: 教程
-
实体店纷纷倒闭,租金还不断上涨,究竟败给的是电商还是房东?
2026-05-15栏目: 教程
-
中国移动光纤猫自带Wi-Fi功能,还需要买路由器吗?
2026-05-15栏目: 教程
-
工信部信息通信管理局副局长隋静:推进云计算大数据的普及应用
2026-05-15栏目: 教程
-
研发占比高达90%,特斯拉避不开的对手!体验新能源轿跑零跑S01
2026-05-15栏目: 教程
