1. 之前写的一直都是分散的函数,用到什么功能,就写什么函数,觉得不够整洁,所以这次写的是封装的类,用起来还不错,但是传递参数的时候遇到了不少问题,所以,查阅了很多资料,总结如下: 1)动态绑定事件问题: 需要将onclick事件绑定到对象上,比如列表项。需要用到addEventListener或者attachEvent,用于吧函数操作添加到事件中去,而不是覆盖,但是,attachEvent不支持FF,FF只能用addEventListener。so,就需要一个函数,把...
1,javascript的原型模型:prototype 在实现面向对象,(像是定义一个类的时候)需要一个构造函数来定义对象的成员,而方法去依附在该构造函数的原型上. 2,javascript中,为了实现继承,必须将子类构造函数的prototype设置为一个父类的对象实例. 3,css的方块套方块模型: 最外是margin 是用来设置一个元素所占的空间的边缘到相邻元素的距离 边框:border 用来设定一个元素的连线 padding 用来设置元素内容互元素边框的距离 还有背...
一种面向对象语言需要向开发者提供四种基本能力: (1) 封装——把相关的信息(无论数据或方法)存储在对象中的能力。 (2) 聚集——把一个对象存储在另一个对象内的能力。 (3) 继承——由另一个类(或多个类)得来类的属性和方法的能力。 (4) 多态——编写能以多种方法运行的函数或方法的能力。 对象的类型 1.本地对象 ①Array类 ②Date类 2.内置对象 3.宿主对象 Array类 toString()方法和valueOf()方法,返回特殊的字符串。该字符串...
字符串的连接 一、 最常用+= 一直说这种方式的效率是最低的,为什么呢?可以看下这种方式的实质过程。 var str = "hello"; str += "world"; (1) 创建存储"hello"的字符串。 (2) 创建存储"world"的字符串。 (3) 创建存储连接结果的字符串。 (4) 把str的当前内容复制到结果中。 (5) 把"world"复制到结果中。 (6) 更新str,使它指向结果。 每次完成字符串连接都会执行步骤2到6,使得这种操作非常消耗资源。如果重复这一过程几百次,甚...
一、 工厂方式 自己的理解:要创建很多个对象的实例,这些实例有相同的属性,但是有不同的属性值。这个时候就需要创个工厂函数(factory function)。 工厂函数(factory function):创建并返回特定类型的对象。 工厂函数中如果一个属性是方法的话,可以在工厂函数的外面定义对象的方法,然后通过属性指向该方法,从而可以避开每次都调用自己的属性方法,这样做使得每个对象都共享了同一个函数。 示例: 代码如下: 输出“小三,小...
本地对象 ①Array类 ②Date类 对象的类型 内置对象 ①Global对象 ②Math对象 宿主对象 今天继续学习JS中的对象,昨天内置对象Global对象和Math对象,今天继续。宿主对象 所有非本地对象都是宿主对象host object,即由ECMAScript实现的宿主环境提供的对象。所有BOM和DOM对象都是宿主对象,书上说将在后面的章节讨论。-_-||| 作用域 JS中只存在一种作用域----公用作用域,所有对象的所有属性和方法是公用的。许多开发者都在网上提出了...
本地对象 ①Array类 ②Date类 对象的类型 内置对象 ①Global对象 ②Math对象 宿主对象 今天继续学习JS中的对象,昨天学完了本地对象中的两个重要对象Array和Date。今天看下内置对象Global对象和Math对象。 Global对象 encodeURI()方法用于处理完整的URI,去除一些空格等字符。 eval()方法可计算某个字符串,并执行其中的的 JavaScript 代码。 Math对象 min()方法和max()方法用于判断一组数中的最大值和最小值。这两个方法都可接受任...
eval的作用其实很简单,就是把一段字符串传递给JS解释器,由Javascript解释器将这段字符串解释成Javascript代码,并且执行他。 举个最简单的例子: 代码如下: eval("alert(1+1)"); 很简单,把字符串解释成JS代码并执行,弹出2。 当然,上面的例子只是个玩具,在实际中没有人会傻到这么用。我想大家最基本的使用eval函数都是应该在DOM中,例如我们有div1,div2,div3,那么在document.getElementByID时我们的ID没有办法去得到,那...
就像我们可以写成这样的形式一样: 代码如下: function Hello() { alert("Hello"); } Hello(); var Hello = function () { alert("Hello"); } Hello(); 其实都是一样的。 但是当我们对其中的函数进行修改时,会发现很奇怪的问题。 代码如下: 输出了两次Hello World。而非我们想象中的Hello和Hello World。 这是因为Javascript并非完全的按顺序解释执行,而是在解释之前会对Javascript进行一次“预编译”,在预编译的过程中,会把...
代码类型只有一种形式就是function。 undefined:未定义,我们也可称之为不存在,typeof(undefined)=undefined. null:为空。undefined是不存在,而null是存在,但却无。typeof(null)=object,但null又不是object,这就是null的神奇而独特之处。 boolean:true or false。 Number:NaN和Infinity是两个特殊之数,NaN代表一个无法用数值来表示的数字,而Infinity代表一个无穷大的数字,相对的,-Infinify则代表负无穷大。在此有两点特殊...
在Javascript,全局环境本身就一个对象。在浏览器宿主中这个对象是window,而当Javascript用于其它非浏览器的宿主,如嵌入式的环境中,可能会是其它的对象。 在这里也纠正一个观念,有很多人都认为Javascript只在浏览器中使用,其实Javascript也能在很多非Web情况下使用,据介绍Javascript在一些基于嵌入式的应用领域表现得也很出色,当然这些我也只是听过传说而已。 言归正传,当我们写下:var i=1时,其实就是声明了一个window作...
好,那就让我们一步步打造,首先让我们来看下继承原本的写法: 代码如下: var Person = function(name, age) { this.name = name; this.age = age; } Person.prototype.SayHello = function () { alert(this.name + "," + this.age); }; var Programmer = function (name, age, salary) { Person.call(this, name, age); this.salary = salary; }; Programmer.prototype = new Person(); var pro = new Programmer("kym", 21, 50...
代码如下: 代码如下: var People = { name: "kym", age: 21, SayHello: function () { alert("Hello,My name is " + this.name + ".I am " + this.age); } } alert(People.name); People.SayHello(); 但是我们是不能重用这个对象的,我们如何把这个对象作为原型的呢? 首先,在一个JSON对象有一个构造方法是不可能的了,那么我们就做一个简单的“工厂”吧,写一个方法来专门负责创建。 代码如下: var People = { Create: fu...
面向对象语言三大特点:继承,多态,封装,这三点虽然Javascript没有提供天然的语法实现,但是我们都可以通过prototype等技巧来实现,因此这种说法似乎不过分。 在Javascript中,构造对象有三种方式: 1. 首先,我们要明确一个概念,Javascript是一种弱类型的语言,一方面体现在Javascript的变量,返回类型都是没有强类型约束的,另一方面,Javascript可以为对象任意添加属性和方法。根据这个,我们可以写出这样的代码: 代码如下...
我们先看看这样一段代码: 代码如下: var Person = function () { }; var p = new Person(); 很简单的一段代码,我们来看看这个new究竟做了什么?我们可以把new的过程拆分成以下三步: var p={}; 也就是说,初始化一个对象p。 p.__proto__=Person.prototype; Person.call(p);也就是说构造p,也可以称之为初始化p。 关键在于第二步,我们来证明一下: 代码如下: var Person = function () { }; var p = new Person(); aler...