用JavaScriptphp常用封装函数数

当前位置:
任务共收到 2 份投稿
已助雇主圆满完成任务
一品威客网已聚集13,123,325个专业人才,如果您也在寻求类似帮助,我们可以为您轻松搞定!
发布类似需求
随时跟进已发布的任务超简单,超方便
手机接任务更便捷
任务编号:370788
我们需要一个javascript的函数,用来来实现选择城市的功能封装
任务已圆满完成
赏金分配:一人独享赏金
雇主要求四川省-成都市
四川省成都市的威客优先
¥500交易金额
100.0%交易好评
可安心交易
威客信用:
四川省-成都市-市辖区
报价说明:
这个我们可以做。成都暴风雨科技有限公司的前身是成都智能手机工作室,该工作室成立于2013年3月,汇集了10余名经验丰富的项目经理、软件工程师、测试工程师、美术设计,并由资深的前IT公司高管担任顾问:
雇主已浏览
¥400交易金额
100.0%交易好评
可安心交易
威客信用:
山东省-青岛市-市北区
报价说明:
可以做,QQ: 159
雇主已浏览
程序开发相关服务推荐
¥50000/起
¥50000/起
¥46000/起
找服务,上一品威客
交易总额:¥11,571,217,414元
人才总量:14,713,333人
需求总量:4,875,090个
联系客服:
在线:9:00-22:00
400-766-8686
(免长途费)
立即提交需求
该雇佣任务由发布。
2个威客提供帮助
1个威客中标
赏金总额¥500.00
程序开发类似需求
所有人才收入排行榜
浙江省-金华市
广东省-佛山市
北京市-北京市
湖北省-武汉市
江苏省-南京市
精品高手攻略
热门问答热门百科
让一品13,123,325人才为您分忧解难!介绍javascript-ecma中的几种封装函数-js教程-PHP中文网QQ群微信公众号介绍javascript-ecma中的几种封装函数首先先介绍如下的几种方法:字符串方法:str.length str.charAt(i):取字符串中的某一个; str.indexOf('e');找第一个出现的位置;找不到返回-1; str.lastIndexOf('e'):找最后一个e出现的位置;找不到返回-1; str.toUpperCase();转大写 str.toLowerCase();转小写 str.substring(起始位置,结束位置):; str.split('切割的方式');字符串切割;字符串转;数组方法:删除:arr.splice(开始位置,删除的个数); 添加:arr.splice(开始的位置[往哪一位的前面添加],0,元素1····); 替换:arr.splice(开始位置,删除的个数,元素1···); arr.sort(function(n1,n2){return n1 - n2}):排序 arr.reverse():翻转 arr.push();往数组后面添加一位; arr.unshift():往数组前面添加一位; arr.pop():从数组的后面删除一位; arr.shift():从数组的前面删除一位; arr.join('连接的方式');数组转字符串的方法; arr.concat(arr1,arr2····);数组连接;数学方法: Math.random();随机数; Math.round():四舍五入; Math.ceil()向上取整; Math.floor()向下取整; Math.abs():取绝对值; Math.max(x,y):求最大数; Math.min(x,y);求最小数; Math.pow(x,y):几的几次方; Math.sqrt():开平方;数组:存多个东西; json:存多个东西; json = { //键值对 name1[键,key]:value1[值,value], name2[键,key]:value2[值,value], }json 与 arr
的区别:1:length undefined arr. 2:下标 属性的方式 arr[0]; 3:顺序 没有顺序 有顺序; 4:循环 for in for,while,for infor in循环也可以循环数组,但是不建议使用,因为性能略低;js小特性: 逗号表达式:只看最后一个逗号后面的那个值;下面是一个通过class获取元素封装的小函数://getByClass(oParent,sClass);//oParent:从哪个父级下面获取;sClass:要获取的是哪个class名字;
function getByClass(oParent,sClass){
if(oParent.getElementsByClassName){
return oParent.getElementsByClassName(sClass);
var aEle = oParent.getElementsByTagName('*');
var arr = [];
for(var i = 0; i & aEle. i++){
var tmp = aEle[i].className.split(' ');
if(findInArr(sClass,tmp) == true){
arr.push(aEle[i]);
} 下面再来几个小案例:1. 本月一共有多少天&script&
var oDate=new Date();
oDate.setMonth(oDate.getMonth()+1);
oDate.setDate(0);
alert(oDate.getDate())
&/script&2. 本月第一天是星期几&script&
var oDate=new Date();
oDate.setDate(1);
alert(oDate.getDay());
&/script&3. 九九乘法表&script&
document.write('&table&');
for(var i = 1; i &= 9; i++){
document.write('&tr&');
for(var j = 1; j &= j++){
document.write('&td&'+i+'*'+j+'='+i*j+'&/td&');
document.write('&/tr&');
document.write('&/table&');
&/script&4. json转换成字符串&script&
var json={a:12,b:5,c:9,d:6};
var arr=[];
for(var name in json){
arr.push(name+'='+json[name])
//alert(arr);
var str=arr.join('&');
alert(str);
&/script&【相关推荐】1. 2. 3.以上就是介绍javascript-ecma中的几种封装函数的详细内容,更多请关注php中文网其它相关文章!共3篇861点赞收藏分享:.&猜你喜欢12345678910
PHP中文网:独家原创,永久免费的在线,php技术学习阵地!
All Rights Reserved | 皖B2-QQ群:关注微信公众号君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
Google地图使用js封装函数
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口JS封装类或对象的最佳方案 - 加俊 - ITeye博客
博客分类:
JS封装类或对象的最佳方案
面向对象强大的优点之一是能够创建自己专用的类或者对象,封装一组属性和行为。抛开性能来说,JS要比面向对象语言如JAVA要灵活好用的多,组装数据结构很灵活方便。那么我们如何来用面向对象的思维来定义JavaScript的类或对象呢?
问题的出现
如果要抽象出来一个人,那么简单的属性为:name,sex,birthday等,方法为:sayHi,最初级的写法就是
var oPerson = new O
oPerson.name = "zs";
oPerson.sex = 'boy';
oPerson.birthday = '';
oPerson.sayHi = function()
alert("Hi ! I am "+this.name);
那么我们要多创建几个人,怎么办呢?就得再写几个Object,那得哭死,那么怎么办呢?看下面的几种解决方案:
下面的最终解决方案可能不是最佳,但是我目前的水平,是觉得最佳的,欢迎指教
functon createPerson(name,sex,birthday)
var oPerson = new O
oPerson.name =
oPerson.sex =
oPerson.birthday =
oPerson.sayHi = function()
alert("Hi ! I am "+this.name);
//那么我们多创建几个人的话,就可以
var person1 = new createPerson('zs','boy','');
var person2 = new createPerson('ls','boy','');
person1.sayHi();
person2.sayHi();
看上去,似乎解决了,但是问题是 你创建几个人就创建了几个sayHi行为,但是他们都是一个功能,怎么办呢?JS的灵活造就了下面的解决方法,把方法作为一个对象的属性:
function sayHi()
alert("Hi ! I am "+this.name);
functon createPerson(name,sex,birthday,fn)
var oPerson = new O
oPerson.name =
oPerson.sex =
oPerson.birthday =
oPerson.sayHi = sayHi;//这里是个函数引用
var person1 = new createPerson('zs','boy','');
var person2 = new createPerson('ls','boy','');
person1.sayHi(); //outputs "Hi ! I am zs"
person2.sayHi(); //outputs "Hi ! I am ls"
问题似乎解决了,但是,你参见prototype就会发现人家有更高明的解决方案,所有函数只创建一次,而每个对象都具有自己的对象属性实例,看下面的代码:
functon CreatePerson(name,sex,birthday,fn)
this.name =
this.sex =
this.birthday =
CreatePerson.prototype.sayHi = function ()
alert("Hi ! I am "+this.name);
var person1 = new CreatePerson('zs','boy','');
var person2 = new CreatePerson('ls','boy','');
person1.sayHi(); //outputs "Hi ! I am zs"
person2.sayHi(); //outputs "Hi ! I am ls"
一般情况下,一个对象或者类不只一个方法,需要多个方法配合使用,那么
CreatePerson.prototype={
sayHi:function()
alert("Hi ! I am "+this.name);
walk:function()
alert("walk,walk");
是不是优雅的多?
昨天写了一半,看到同志们回复是javascript高级程序设计上的,我要说的是对,确实是来源于上面,我就不废话了,中间省掉了很多循序渐进的引导,如:工厂模式、构造函数方式、原型方式、混合的构造方法/原型方式、动态原型方式、混合工厂模式。希望想学好JS的同志们回头多看看这些,会明白很多“为什么”。
呵呵,炫丽背后其实很朴实。
浏览 28064
iammonster
浏览: 1374049 次
来自: 北京
例子都打不开
好东西[color=blue][/color]
不在haoop中是在linux系统中,映射IP的时候,不能使用 ...
挺好的, 谢谢分享问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
本人JS新手,最近项目很多复用的函数,不知道如何处理,只是简单的写成了函数,放在一个JS文件里面,但这样肯定有问题,比如函数重名。
看了一下网上的封装方式,感觉花样太多,不知道有什么常用通用的处理方式呢?我主要就是封装常用函数,比如数组处理、时间处理这种。
网上看了主要是两种方式(或者这根本是两个不同东西 -。-,大概这个意思吧):
1.创建js库,大多采用以下模版
&span style="font-family:FangSong_GB2312;"&//JavaScript库模板代码
(function (){
function $(){
alert("被调用到喽!");
/*alert()是JavaScript脚本语言中窗口window对象的一个常用方法;
其主要用法就是在你自己定义了一定的函数以后,通过执行相应的操作,
所弹出对话框的语言。并且alert对话框通常用于一些对用户的提示信息。*/
//注册命名空间 'myNameSpace' 到window对象上
window['myNameSpace'] = {}
//把$函数注册到 'myNameSpace'命名空间中
window['myNameSpace']['$']=$;
看起来有点复杂,另外,搞不懂为什么非要放在span里面,这喵的不是js嘛。
2.js面向对象的封装
采用对象的方式,使用时实例化对象即可。
搜了半天,没看到什么通用的解决办法,方式太多不知道怎样处理比较合理呢。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
个人给一点建议不要再搞什么命名空间了。已经进入 2016 年啦,JavaScript 现在的模块化机制已经相当成熟,学习一下如何用 ES2015 Module 来封装模块,实际用的时候可以考虑各种模块转换编译器/加载器,浏览器的兼容性不会是问题。比如说 babel/webpack/jspm 等等都可以……这样吧,我简单帮你梳理一下:
首先学会怎么用 ES2015 来编写/封装模块(node/npm,加上 babel 的入门知识)
记住,在编写封装模块时是不需要考虑兼容性的,后面有办法让你向后兼容(至少到 ES5)
学会发布它,比如说发布到 npm
学会如何引入模块到你的应用体系中去,如何加载/打包(用上 gulp/webpack/jspm 等等,取决于项目)
这是一个完整的生态系统,封装不只是要学习代码怎么写,更要知道如何维护,如何应用,否则封装的没有普适性就没有价值。
至于具体到新的模块语法怎么写,我这里有之前回答别人(不在 SF)的一部分内容供你参考——别想太复杂,可以很简单的:
我不喜欢用 Class,不管是过去的构造器模式还是现在的新语法。不是因为对任何编程范式有偏见,本来 JavaScript 就不是 Class Based OO 语言,硬生生的去模仿就是会觉得别扭罢了。和 Java、C# 等语言不同,class 不是必需品,这也就意味着你完全可以不用。然而奇怪的是使用 JavaScript 的人很多却是不用 class 不行,这是不是对这门语言存在很大的误解呢?
更重要的是在实践中我们会发现使用其他的模式——比如工厂函数(Factory Functions)要远比 class 简洁、灵活,用它来替代 class 几乎总能得到更好的结果。
简单工厂函数
// person.js
export default _ =& {
console.log('Hello world!')
用起来和一个 Class 几乎一模一样——除了不需要用 new,这不算坏处吧?
import Person from './person'
const nightire = Person()
nightire.greet()
// "Hello world!"
console.log 限制了 greet 方法的行为,为了不局限问候的方式,可以使用依赖注入——这是解耦的一种简便易行的方法。即使在现实中很多时候看不出需要依赖注入的迹象,我们也应该有意识的这么做。在定义一种“类型”的时候对外界知道的越少越好(于是就更容易复用、扩展、组合……)。
// person.js
export default ioStream =& {
ioStream.send('Hello world!')
比如说我们可以把 console 封装一下,让系统内所有的 ioStream 都具有统一的接口,然后就可以直接使用:
import Person from './person'
import ConsoleStream from 'console-stream'
const nightire = Person(ConsoleStream())
nightire.greet()
// "Hello world!"
不用 Mocking 的单元测试
这个是顺带一提的事情,因为我注意到不懂得处理依赖注入(或者说更高层次上的解耦概念)的人通常都会把单元测试写得无比蛋疼……实际上,对象字面量在很多时候胜过一切构造模式:
import test from 'ava'
import Person from './person'
test(`a person can send message to io stream`, t =& {
const ioStream = {
send(anything) {
t.same(anything, 'Hello world!');
const anyone = Person(ioStream)
anyone.greet()
其实私有成员可以变得很自然很自然,闭包一样在用,只是不那么扎眼了:
// person.js
export default ioStream =& {
let _message = 'Hello world!'
ioStream.send('Hello world!')
get message() {
return _message
set message(message) {
_message = message
用法就不写了,和之前没什么区别。getter/setter 也不是必须的,看接口设计需求了。
这才是对 OO 来说最重要的(相较于怎么定义/创建对象来说),总的来说组合总是要优于继承,工厂模式搞起来尤其轻松。
比方说我们已经有了一个动作“类”:
// action.js
export default ioStream =& {
ioStream.send('(Waving Hands...)')
那么与 Person 的组合可以这样:
import Person from './person'
import Action from './action'
import ConsoleStream from 'console-stream'
const _console = ConsoleStream()
const nightire = Object.assign({}, Person(_console), Action(_console))
nightire.message = 'Farewell, my friend!'
nightire.wave()
// "(Waving Hands...)"
nightire.greet()
// "Farewell, my friend!"
事前绑定的方法引用
这是我觉得最好的一个优点。由于 this 在 JavaScript 中是在运行时动态绑定的,如果使用你代码的人不理解这一点,那么他们就会犯错误(而且会指责是你写的不对……)。有些人是因为不理解 this 而不敢用,有些人则是为了迁就前者而干脆不去用,架构师会比较容易体会这类情况。
这是典型的容易犯错的例子:
// stepper.js
export default class Stepper {
constructor(offset) {
this.offset = offset
add(amount) {
return amount + this.offset
// main.js
import Stepper from './stepper'
const stepper = new Stepper(1)
[1, 2, 3].map(stepper.add.bind(stepper))
容易犯错的地方就是最后一行,如果不加 .bind(stepper) 的话最终 this 的指向就是错误的。但往往使用者并不理解这一点,反正看到你的文档就知道这个能加上初始化传入的 offset 就是了,除非你不厌其烦的在文档里强调:“注意上下文的变化,如有必要请用 bind() 明确 this 的指向“……啊,说不定你还得培训一下让大家都知道如有“必要”的确切范围。
然而你也可以这样来重写一下:
// stepper.js
export default offset =& {
add(amount) {
return amount + offset
// main.js
import Stepper from './stepper'
const stepper = Stepper(1)
[1, 2, 3].map(stepper.add)
// [2, 3, 4]
于是无论是具体实现还是接口定义都能保持简洁一致。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
,先学习下js模块化。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
1)你的确定你的span这个写法能运行?你测试过了么?2)要避免重复,并且封装自己的函数,那么就是用命名空间`其实就是一个对象,最大程度避免函数重名及被覆盖问题
(function(global){
var myfun1=function(){
console.log('myfun1');
var myfun2=function(){
console.log('myfun2');
//设置你的命名空间
var mypackageName="com.mydomain.utils";
var packageArray=mypackageName.split(".");
var finalObj=packageArray.reduce(function(prev,current){
return prev[current]||(prev[current]={});
}, global);
//将你的函数绑定到命名空间上
finalObj.myfun1= myfun1;
finalObj.myfun2= myfun2;
}(window));
com.mydomain.utils.myfun1();//输出 myfun1
com.mydomain.utils.myfun2();//输出 myfun2
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
你不就需要一个命名空间吗。对象就是天然的命名空间。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
我觉得最好写一个私有的npm木块
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
nightire的回复比较有参考性,学习了
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
命名空间或者export
同步到新浪微博
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:}

我要回帖

更多关于 jq封装函数 调用方法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信