- 浏览: 1186731 次
- 性别:
- 来自: 北京
-
最新评论
-
zhizhen23:
LZ 提供的链接地址失效了
重写的isPlainObject方法 -
LovingBaby:
LovingBaby 写道function fun() {}f ...
读jq之二(两种扩展) -
LovingBaby:
说的很清楚!jQuery作者为了实现简洁调用的苦心!高超的编程 ...
读jq之一(jq对象的组成) -
hard_ly:
...
将伪数组转换成数组 -
zlxzlxzlxzlxzlx:
这不能算是任意进制之间的转换,例如二十六进制、十二进制又该如何 ...
用递归实现十进制数转换N进制
文章列表
8、Ext.js的写类方式
这里用的是Ext core3.0,Ext中用Ext.extend来定义一个类(当然它更多用来扩展一个类),Ext整个框架各种控件如Panel,MessageBox等都是用Ext.extend方法来扩展。这里仅仅用它来定义一个最简单的类。
看Ext.extend的代码可得知,它仍然是用构造函数和原型来组装一个类。
这里只需传两个参数即可,第一个参数是根类Object,第二个是原型。
/**
* Person类
* @param {Object} name
*/
var Person = Ext.extend(Object ...
7、dojo.js的写类方式
dojo最新是1.3.1了,记得07年时还是0.4。文档也渐渐多了起来,用dojo的也慢慢多了。dojo还发布了core版,压缩后只有27kb。dojo中用dojo.declare方法来定义一个类。dojo.declare的源码就不贴在这里了。dojo.declare有三个参数,
参数1:类名className
参数2:继承的类superclass
参数3:构造器,方法props
单纯的定义一个类实际只需传第一,三两个参数。因为这里只讨论如何定义一个类,不讨论继承。代码如下:
//定义类名
var className = & ...
这篇开始会分析流行的js库之写类方式。各种库的写类方式虽然千奇百怪,但仍然逃离不了本质---用构造函数和原型
来组装类。
6、Prototype.js的写类方式
//prototype.js中的代码
var Class = {
create: function() {
return function() {
this.initialize.apply(this, arguments);
}
}
}
//简化后的
function Clazz() {
return function(){
this.initial ...
5、用 构造函数+原型 定义一个类;同一构造函数可以定义出多个类型
/**
* $define 写类工具函数之二
* @param {Object} constructor
* @param {Object} prototype
*/
function $define(constructor,prototype) {
var c = constructor || function(){};
var p = prototype || {};
return function() {
for(var atr ...
4、构造函数
+
原型 直接组装一个类;同一构造函数将组装出同一类型
通过前面几篇得知javascript写类无非基于构造函数
和原型
。既然这样,我们写个工具函数来写类。
/**
* $class 写类工具函数之一 ...
取前面两种的优点:
a、用构造函数来定义类属性(字段)
b、用原型方式来定义类的方法。
就有了第三种方式。这种方式貌似采用的人较多。
3、综合构造函数/原型
/**
* Person类:定义一个人,有个属性name,和一个getName方法
* @param {String} name
*/
function Person(name) {
this.name = name;
}
Person.prototype.getName = function() {
return this.name;
}
这样,即可通过构造函数构造不同nam ...
2、原型方式
/**
* Person类:定义一个人,有个属性name,和一个getName方法
*/
function Person(){}
Person.prototype.name = "jack";
Person.prototype.getName = function() { return this.name;}
把类的属性(字段),方法都挂在prototype上。
造几个对象测试下:
var p1 = new Person();
var p2 = new Person();
console.log(p1.g ...
从这篇起,会由浅到深的分析js OO之写类方式,大概会有5-8篇。后面陆续会分析流行库(框架)的写类方式。为了讨论的单一性,暂不考虑类的继承,(私有,受保护)属性或方法。
EMCA262规范中没有类(class)的概念,js的new只是让他看起来更像c++,java一点。这里说的写类,只是书写js代码风格而已。
1、构造函数方式
/**
* Person类:定义一个人,有个属性name,和一个getName方法
* @param {String} name
*/
function Person(name) {
this.name = name;
...
html的img标签:定义一个图像在网页中引入。它还有个usemap属性很有意思。
看看51ditu首页中有一个地图,中部有个中国地图。点击右键下载下来看下就是一个普通的图片。
但点击地图上的省份却可以出发不同的事件(或打开不同的链接),很有意思。原来是使用了usemap属性。
当然还要定义一个map标签。整份代码如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
&l ...
正常的for循环就不提了,直接进入正题。如下:
//示例1
for(var i=0,a;a=["jack","tom","lily","andy"][i++];){
console.log(a);
}
//示例2
var ary = ["jack","tom","lily","andy"];
for(var i=0,a;a=ary[i++];){
console.log(a);
}
从firebug控制 ...
for in 语句用来列举对象的属性(成员),如下
var obj = { name:"jack",
getName:function(){return this.name}
};
//输出name,getName
for(var atr in obj) {
alert(atr);
}
不知注意了吗,没有输出obj的toString,valueOf等内置属性(或称内置成员,隐藏属性和预定义属性)。即for in用来列举对象的显示成员(自定义成员)。
如果重写了内置属性呢,下面就重写obj的toString
var obj = {nam ...
IE6下的bug实在多,这不这次又碰到一个。
地图搜索结果页面点击一个marker的“更多信息”时,IE7,firefox3.0下都正常。IE6下却无法显示。因为是跨域访问开始以为是http请求慢造成。后更换url后仍然存在。
下面是网上的一 ...
地图api中有以下代码
var img=document.createElement("img");
img.galleryImg=false;//img.galleryImg="no";
img标签的galleryimg属性只在IE6下起作用,是个过时的属性。它的作用是设置是否显示图片工具条(Image Toolbar)
即鼠标放在图片上时会出现如下提示,可以方便用户保存,打印,发送邮件等
当然右键单击图片的菜单上也会有“图片另存为”(英文是Save Piciure As)
需要注意的是,即使在IE6上也 ...
script不受Web浏览器跨域安全限制的束缚,即能实现跨域访问。这是它的最大优点。
另外一点需要注意的是不同浏览器对script的触发事件不同,即回调函数要写在这些函数之中,且只支持异步调用
IE下:加载完成后触发"onreadystatechange"事件
firefox下:加载完成后触发"onload"事件
以下是同xmlHttpRequest的比较
Dynamic scrip ...
浏览地图时,使用鼠标滚轮来放大和缩小。即用到了滚轮事件。
这个事件在标准下和IE下是有区别的。firefox是按标准实现的,事件名为"DOMMouseScroll
",IE下采用的则是"mousewheel
"。
当然一行代码就解决了兼容问题
var mousewheel = document.all?"mousewheel":"DOMMouseScroll";
事件属性,IE是event.wheelDelta,Firefox是event.detail
属性的方向值也不一样,IE ...