JavaScript基础知识点归纳(推荐)(2)

function compare(num1,num2) { var temp1 = parseInt(num1); var temp2 = parseInt(num2); if (temp1 < temp2) { return -1; } else if (temp1 == temp2) { return 0; } else { return 1; } } var array = [1,25,3]; array.sort(compare); alert(array);

我们再用匿名函数的方式实现:

匿名函数排序

JavaScript

var array = [1,25,3]; array.sort(function(num1,num2){ var temp1 = parseInt(num1); var temp2 = parseInt(num2); if (temp1 < temp2) { return -1; } else if(temp1 == temp2) { return 0; } else { return 1; } }); alert(array);

16、JavaScript中定义对象的5种方式(JavaScript中没有类的概念,只有对象)i)基于已有对象扩充其属性和方法

基于已有对象扩充其属性和方法

JavaScript

var object = new Object(); //添加name属性 object.name = "zhangsan"; //添加sayName方法 object.sayName = function(name) { this.name = name; alert(this.name); }; object.sayName("kyle");//调用sayName方法,name属性被修改为kyle,浏览器将打印kyle

最简单的一种方式,使用起来并不方便,适合于临时需要一个对象。

ii)工厂方式创建对象

不带参数的工厂方法:

JavaScript

//工厂方法 function createObject() { var object = new Object();//创建一个对象 object.name = "zhangsan";//为该对象添加一个name属性 object.password = "123";//为该对象添加一个password属性 object.get = function() {//为该对象添加一个get方法 alert(this.name+","+this.password); }; return object;//返回该对象 } var object1 = createObject();//调用createObject工厂方法创建对象object1 var object2 = createObject();//调用createObject工厂方法创建对象object2 object1.get();//调用对象get方法 object2.get();//调用对象get方法

带参数的工厂方法:

JavaScript

function createObject(name,password) { var object = new Object(); object.name = name; object.password = password; object.get = function() { alert(this.name+","+this.password); }; return object; } var object1 = createObject("zhangsan","123"); var object2 = createObject("lisi","456"); object1.get(); object2.get();

上面两种不带参数和带参数的工厂方法缺点:

每创建一个对象,内存中就创建一个get方法,比较浪费内存,且影响性能。而我们的期望是,创建两个不同的对象,它们的属性是不一样的,但方法是共用的。所以接下来我们需要改进createObject工厂方法。

改进的工厂方法:

JavaScript

function get(){ alert(this.name+","+this.password); } function createObject(name,password) { var object = new Object(); object.name = name; object.password = password; object.get = get; return object; } var object1 = createObject("zhangsan","123"); var object2 = createObject("lisi","456"); object1.get(); object2.get();

将get方法定义在createObject函数外面,这样每创建一个对象,get方法都是共用的。让一个函数对象被多个对象所共享,而不是每一个对象都拥有一个函数对象。

iii)构造函数方式创建对象

不带参数的构造函数:

JavaScript

function Person(){ //在执行第一行代码前,js引擎会为我们生成一个对象 this.name = "zhangsan"; this.password = "123"; this.getInfo = function() { alert(this.name+","+this.password); }; //此处有一个隐含的return语句,用于将之前生成的对象返回(也是跟工厂方式不一样的地方) } var p1 = new Person(); p1.getInfo();

带参数的构造函数

JavaScript

function Person(name,password) { this.name = name; this.password = password; this.getInfo = function() { alert(this.name+","+this.password); }; } var p1 = new Person("zhangsan","123"); var p2 = new Person("lisi","456"); p1.getInfo(); p2.getInfo();

iv)原型(prototype)方式创建对象

prototype是Object对象里面的一个属性

prototype

JavaScript

function Person(){ } Person.prototype.name = "zhangsan"; Person.prototype.password = "123"; Person.prototype.getInfo = function() { alert(this.name+","+this.password); }; var p1 = new Person(); var p2 = new Person(); p1.name = "kyle";//对象生成之后再去改变属性 p1.getInfo(); p2.getInfo();

单纯地使用原型方式有两个问题:第一,你无法在构造函数中为属性赋初值,只能在对象生成之后再去改变属性值。

prototype

JavaScript

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzszdx.html