1.1. 自定义对象
1.1.1. 无参构造函数
/* * 自定义对象 * * */ function Person() { window.document.write("constructor()<br>"); }
var person = new Person(); //定义属性 person.name = "jack"; person.age = 23; //定义方法 person.work = function() { window.document.write("person working...<br/>"); }; //获取构造函数 window.document.write(person.constructor + "<br/>");
window.document.write(person.name + "," + person.age + "<br/>"); person.work();
|
1.1.2. 有参数构造函数
function Person(name, age) { this.name = name; this.age = age; this.work = function() { alert(this.name + ":" + this.age); } }
var person = new Person("jack", 28); person.work();
|
1.1.3. Object方式
/* * 自定义对象Object方式 * * */ var person = new Object(); person.name = "jack"; person.age = 28; person.sayHello = function() { document.write(this.name + ":" + this.age); } person.sayHello(); |
该例子创建了一个名为person的对象,并添加了2个属性(name age)和一个方法(sayHello)
使用构造函数模式方式创建对象:
先自定义类,其实就是定义一个和类名相同的函数。
再使用new关键字调用定义好的类。
(任何函数,只要通过new操作符来调用,那它就可以作为构造函数)
说明:
要将属性与方法赋给this,这样才是表示是对象的属性,如果写var str则是方法中的局部变量。
不要写new Object()。
不要写return语句。
JS在new Person()会做如下事:
1,创建一个新对象。
2,this指向新对象。
3,执行构造方法中的代码。
4,返回新对象。
字面量方式创建对象:
var person={ name:"李四", age:88, eat:function(){ alert("eating..."); } }; alert(person.name+person.age); person.eat(); |
1.2. prototype
“prototype”字面翻译是“原型”,是javascript实现继承的主要手段。粗略来说就是:prototype是javascript中的函数(function)的一个保留属性,并且它的值是一个对象(我们可以称这个对象为"prototype对象")。
Prototype注意的细节:
1. prototype是函数(function)的一个必备属性(书面一点的说法是"保留属性")(只要是function,就一定有一个prototype属性)
2. prototype的值是一个对象
3. 可以任意修改函数的prototype属性的值。
4. 一个对象会自动拥有这个对象的构造函数的prototype的成员属性和方法。
需求:
1. 自定义一个数组的工具类。
function arrTool(){} var ArrayTool = new arrTool(); ArrayTool.getMax = function(arr) { var max = 0;
for(var x=1; x<arr.length; x++) { if(arr[x]>arr[max]) max = x; } return arr[max]; }; ArrayTool.getMin = function(arr) { var min = arr[0];
for(var x=1; x<arr.length; x++) { if(arr[x]<min) min = arr[x]; } return min; } /* ArrayTool.getMax = getMax; //获取最值。 function getMax(arr) { var max = 0;
for(var x=1; x<arr.length; x++) { if(arr[x]>arr[max]) max = x; } return arr[max]; } */ ArrayTool.binarySearch = function(arr,key) { var min,max,mid;
min = 0; max = arr.length-1;
while(min<=max) { mid = (min+max)>>1;
if(key>arr[mid]) min = mid + 1; else if(key<arr[mid]) max = mid - 1; else return mid; } return -1; } /* ArrayTool.binarySearch = halfSearch; //折半查找,必须是对有序的数组。 function halfSearch(arr,key) { var min,max,mid;
min = 0; max = arr.length-1;
while(min<=max) { mid = (min+max)>>1;
if(key>arr[mid]) min = mid + 1; else if(key<arr[mid]) max = mid - 1; else return mid; } return -1; } |
2. 把数组的工具方法添加到javascript内置对象Array中。
Array.prototype.getIndex = function(element) { for(var x=0; x<this.length; x++) { if(this[x]==element) return x; } return -1; } Array.prototype.getMin = function() { var min = this[0]; for(var x=1; x<this.length;x++) { if(this[x]<min) min = this[x]; } return min; } |
3. 给 字符串添加新的方法
// JavaScript Document //给字符串string对象添加新功能。 //去除字符串两端的空格。 String.prototype.trim = function() { var start,end; start = 0; end = this.length-1;
while(start<=end && this.charAt(start)==" ") start++;
while(start<=end && this.charAt(end)==' ') end--;
return this.substring(start,end+1); }
//将字符串变成数组。 String.prototype.toCharArray = function() { var arr = new Array(this.length);
for(var x=0; x<this.length; x++) { arr[x] = this.charAt(x); }
return arr; } //将字符串进行反转。 String.prototype.reverseString = function() { var arr = this.toCharArray();
return arr.reverse().join(""); } |