javascript中新建类,对象方法总结

来源:互联网 发布:美工岗位说明书 编辑:程序博客网 时间:2024/06/05 19:25
创建对象的方法一:var boxBaseAttr = new Object; 
boxBaseAttr = { 
width : "26px", 
height : "40px", 
position: "absolute", 
top : "30px", 
background : "url(38.gif) no-repeat center top", 
zIndex : 10 

}; 

方法二:var person = new Object();

person.name = "Nicholas";

person.age = 29;

方法三:

var person = {

name :"apple",

age:29,

}

方法四:

var person = {

"name" :"apple",

"age":29,

}

方法五:

var person = {};

person.name = "Nicholas";

person.age = 29;

方法六:

function displayInfo(args){

var output = "";

if(typeof args.name == "string"){

 output = "Name:"+args.name;

}

if (typeof args.age == "number"){

output = "Age:"+args.age;

}

alert(output);

}


displayInfo({

name:"Nicholas",

age:29}):

displayInfo({

name:"Greg",

}):

创建函数的方法:

方法一:

function sum (a,b){

return a+b;

}

方法二:

var sum = function(a,b){

return a+b;

};

方法一和方法二的区别是:

方法一与别调用的代码在书写的先后顺序上无要求,但是方法二要先实现方法后,在下面再调用,否则会报“unexpected identifier”错误。

方法三:

var sum = new Function("a","b","return a+b");不推荐,效率低,第一次是解析常规ECMAScript代码,第二次是解析传入构造函数中的字符串。

创建类的方法:

方法一:工厂模式

function createPerson(name,age,job){

var o = new Object();

o.name = name;

o.age = age;

o.job = job;

o.sayName = function(){

alert(this.name);

};

return o;

}

var person1= createPerson("Nicholas",29,"Software Engineer ");

var person2 = createPerson("Greg",27,"Doctor");

工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题,即怎么知道一个对象的类型。

方法二:

构造函数的模式

function Person(name,age,job){

this.name = name;

this.age = age;

this.job = job;

this.sayName = function(){

alert(this.name);

};

var person1= new  Person("Nicholas",29,"Software Engineer ");

var person2 = new  Person("Greg",27,"Doctor");

方法三:原型模式:

function Person(){
}

Person.prototype.name = "Nicholas";

Person.prototype.age = 29;

Person.prototype.job = "Software Engineer";

Person.prototype.sayName = function(){

alert(this.name);

};

var person1 = new Person();

person1.sayName();

}

更简单的原型语法:

function Person(){

}

Person.prototype = {

name:"Nicholas",

age:29,

job:"Software Engineer",

sayName:function(){

alert(this.name);

}

}

方法四:组合使用构造函数模式和原型模式

这种是最常见的方式,构造函数模式用于定义实例属性,原型模式用于定义方法和共享的属性

function Person(name,age,job){

this.name = name;

this.age = age;

this.job = job;

this.friends = ["Shelby","Court"];

}

Person.prototype = {

constructor:Person,

sayName:function(){

 alert(this.name);

}

}

方法四:动态原型模式:

function Person(name,age,job){

this.name = name;

this.age= age;

this.job=job;

if(typeof  this.sayName != "function"){

Person.prototype.sayName = function(){

 alert(this.name);

};

}其中if语句只要检查一个属性或方法就好,在if语句中实现需要的类方法或属性,typeof也可以改为instanceof,

var friend = new Person("Nicholas",29,"Software Engineer");

friend.sayName();

}

方法五:寄生构造函数模式

function createPerson(name,age,job){

var o = new Object();

o.name = name;

o.age = age;

o.job = job;

o.sayName = function(){

alert(this.name);

};

return o;

}

var person1= new Person("Nicholas",29,"Software Engineer ");

var person2 = new Person("Greg",27,"Doctor");

可以为Array等类添加方法和属性,但是得到的对象不能依赖instanceof 来确定对象类型,建议可以使用别的方法的情况下,不要使用这种模式。

方法六:稳妥构造函数模式

function Person(name,age,job){

 var o = new Object();

//私有变量和方法

var name = "name";

fucntion a (){

}

//public方法

o.sayName = function(){

alert(name);

};


}

var friend = Person("Nicholas",29,"Software Engineer");

friend.sayName();

同样得到的对象不能依赖instanceof 来确定对象类型

0 0
原创粉丝点击