扩展JS
//JS的扩展方法: 1 定义类静态方法扩展 2 定义类对象方法扩展
var aClass = function(){}
//1 定义这个类的静态方法
aClass.sayHello = function(){
alert('say hello');
}
//2 定义这个类对象的对象方法
aClass.prototype.protoSayHello = function(){
alert('prototype say hello');
}
aClass.sayHello() ;//aClass的静态方法
var aObject = new aClass();
aObject.protoSayHello(); //类对象的方法扩展
//JQuery的方法扩展
//定义jquery的扩展方法
//1 定义JQuery的静态方法
jQuery.extend({
staticHello: function () {
alert("wwg, staticHello");
}
});
var str = $.staticHello();
//2 定义JQuery对象的扩展方法
jQuery.fn.ObjHello = function () {
return alert("ObjHello");
}
$("#htmlDiv").ObjHello();
---------------------------------------------------------------------------------
<script type="text/javascript">
//自定义的函数(类)
function selfFun(name) {
this.m_Name = name;
}
// 为自定义类添加一个扩展一个方法
selfFun.prototype.Hello = function() {
document.write("你好!" + this.m_Name);
};
var self = new selfFun("张占岭")//为类通过它的构架方法赋值
self.Hello();
</script>
<script type="text/javascript">
//通过函数(类)的prototype属性来继承另一个函数
function A() {
this.MethodA = function() {
document.write("MethodA");
}
}
function B() {
this.MethodB = function() {
document.write("MethodB");
}
}
B.prototype = new A(); //TestObjectB继承了TestObjectA类
var testObjectB = new B();
testObjectB.MethodA();
</script>
*********************************************************************************
<script type="text/javascript">
// 注意,prototype只对本script段起作用
// prototype原型关键字,为一个JS原对象扩展一个方法
Array.prototype.max = function() {
var i, min = this[0];
for (i = 1; i < this.length; i++) {
if (min > this[i])
min = this[i];
}
return min;
};
var myArray = new Array();
myArray[0] = 1;
myArray[1] = 3;
myArray[2] = 2;
document.write(myArray.min());
</script> ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 4、组合构造函数及原型模式
目前最为常用的定义类型方式,是组合构造函数模式与原型模式。构造函数模式用于定义实例的属性,而原型模式用于定义方法和共享的属性。结果,每个实例都会有自己的一份实例属性的副本,但同时又共享着对方方法的引用,最大限度的节约内存。此外,组合模式还支持向构造函数传递参数,可谓是集两家之所长。
function Person(name, age, job) {this.name = name;this.age = age;this.job = job;this.lessons = ['Math', 'Physics'];}Person.prototype = {constructor: Person,//原型字面量方式会将对象的constructor变为Object,此外强制指回PersongetName: function () {return this.name;}}var person1 = new Person('Jack', 19, 'SoftWare Engneer');person1.lessons.push('Biology');var person2 = new Person('Lily', 39, 'Mechanical Engneer');alert(person1.lessons);//Math,Physics,Biologyalert(person2.lessons);//Math,Physicsalert(person1.getName === person2.getName);//true,//共享原型中定义方法
在所接触的JS库中,jQuery类型的封装就是使用组合模式来实例的!!!
5、动态原型模式
组合模式中实例属性与共享方法(由原型定义)是分离的,这与纯面向对象语言不太一致;动态原型模式将所有构造信息都封装在构造函数中,又保持了组合的优点。其原理就是通过判断构造函数的原型中是否已经定义了共享的方法或属性,如果没有则定义,否则不再执行定义过程。该方式只原型上方法或属性只定义一次,且将所有构造过程都封装在构造函数中,对原型所做的修改能立即体现所有实例中:
function Person(name, age, job) {this.name = name;this.age = age;this.job = job;this.lessons = ['Math', 'Physics'];}if (typeof this.getName != 'function') {//通过判断实例封装Person.prototype = {constructor: Person,//原型字面量方式会将对象的constructor变为Object,此外强制指回PersongetName: function () {return this.name;}
}}var person1 = new Person('Jack', 19, 'SoftWare Engneer');person1.lessons.push('Biology');var person2 = new Person('Lily', 39, 'Mechanical Engneer');alert(person1.lessons);//Math,Physics,Biologyalert(person2.lessons);//Math,Physicsalert(person1.getName === person2.getName);//true,//共享原型中定义方法
注:以上内容参考《JavaScript 高级程序设计》第3版
扩展JS的更多相关文章
- [No00007A]没有文件扩展".js"的脚本引擎 解决办法
在命令行运行JScript脚本时,遇到如下的错误提示: “输入错误: 没有文件扩展“.js”的脚本引擎.” 这样的错误,原因是因为JS扩展名的文件被其他软件关联了,需要取消关联. 如系统中安装了ULT ...
- 没有文件扩展".js"的脚本引擎 解决办法
在命令行运行JScript脚本时,遇到如下的错误提示: “输入错误: 没有文件扩展“.js”的脚本引擎.” 这样的错误,原因是因为JS扩展名的文件被其他软件关联了,需要取消关联. 如系统中安装了ULT ...
- 没有文件扩展“.js”的脚本引擎问题解决
安装MinGW的时候提示没有文件扩展".js"的脚本引擎. 原因:系统安装Dreamwear.UltraEdit.EditPlus后修改了.js文件的默认打开方式.当想直接执行js ...
- 没有文件扩展js的脚本引擎
没有文件扩展js的脚本引擎 没有文件扩展js的脚本引擎怎么解决_百度经验 https://jingyan.baidu.com/article/ff42efa93a7ad9c19e2202f0.html
- 我的前端架构之二--统一扩展Js方法
我的前端架构汇总 MyJs_Core.js 这是一个核心的Js文件,它扩展了原生的Js方法.如下: Array对象: 1) indexOf 2) max 3) min 4) removeAt 5) i ...
- 『开源』扩展 JS 的 Date 处理函数
背景: JS 有自己的 时间类型 Date —— 但是,在某些情况下 这个对象似乎 不太好用. 本文 基于 JQuery 扩展了一些 JS日期函数,包括: > 字符串 转 Date 对象 万 ...
- 扩展JS Date对象时间格式化功能
在自己JS代码中引入一下代码: Date.prototype.format =function(format) { var o = { "M+" : this.getMonth() ...
- js 日报 周报 月报 时间扩展 js
当初做统计业务需要处理时间 周报:本周 上周 下周 近一周 月报上月 本月 等 需要使用时间处理 所以扩展了这些方法 <!DOCTYPE html> <html xmlns=&quo ...
- 扩展js,实现c#中的string.format方便拼接字符串
//"{0}-{1}-{2}".format("xx","yy","zz") //显示xx-yy-zz String.p ...
随机推荐
- hdu1501 Zipper[简单DP]
目录 题目地址 题干 代码和解释 参考 题目地址 hdu1501 题干 代码和解释 最优子结构分析:设这三个字符串分别为a.b.c,如果a.b可以组成c,那么c的最后一个字母必定来自a或者b的最后一个 ...
- Devops(四):Docker 镜像管理
参考 <Docker中上传镜像到docker hub中> <Docker 镜像管理> <通过容器提交镜像(docker commit)以及推送镜像(docker push ...
- OpenTK学习笔记(1)-源码、官网地址
OpenTK源码下载地址:https://github.com/opentk/opentk OpenTK使用Nuget安装命令:OpenTK:Install-Package OpenTK -Versi ...
- Mysql中的Date转换
一.背景 Mysql中有张表,表的一列为Date类型. 1. 插入日期xxx.setCreateTime(new Date())mybatis.insert(xxx) 2. 读取日期用Mybaitis ...
- java获取ubuntu某个目录下的所有文件信息
java获取ubuntu某个目录下的所有文件信息 public List<VCFile> getAllFiles(String basicDirName) { List<VCFile ...
- 数据分析入门——pandas之合并函数merge
merge有点类似SQL中的join,可以将不同数据集按照某些字段进行合并,得到新的数据集 1.参数一览表: 2.一对一连接:默认情况下,会按照相同字段的进行连接 例如有相同字段emp的两个df,m ...
- nodejs 管道判断
// 不优雅的判断管道判断 let d process.stdin.on('data', chunk => { d = String(chunk) }) setTimeout(() => ...
- python初级(302) 2 easygui简单使用
一.复习之前的两个练习,巩固计数循环和条件循环 1.系统生成一个随机数1到5,然后让用户的猜测,若猜对了,提示恭喜你,猜对了,否则提示,对不起,你猜错了(提示,1到5的随机数为:secret = ra ...
- 转 全新多媒体共享器Ipush推送|Miracast WIFI无线同屏推送
http://www.52bjw.cn/product-info/5767857.html 操作指南及注意事项 (draft) miracast和dlna/airplay分别工作在wifi direc ...
- [LeetCode] 803. Bricks Falling When Hit 打击砖块掉落
We have a grid of 1s and 0s; the 1s in a cell represent bricks. A brick will not drop if and only i ...