//JavaScript 创建对象 构造函数
//在 JavaScript中,几乎所有的事物都是对象。
//从JavaScript定义上讲对象是无序属性的集合,其属性可以包含基本值、对象或函数。也就是说对象是一组没有特定顺序的属性,每个属性会映射到一个值上,是一组键值对,值可以是数据或对象。
//对象也是一个变量,但对象可以包含多个值(多个变量)。
//简单的对象
var car = {type:"Fiat", model:500, color:"white"};
var obj2=new Object();
obj2.a=1;
obj2.b=2;
console.log(car); //Object {type: "Fiat", model: 500, color: "white"}
console.log(obj2); //Object {a: 1, b: 2}
/*可以在定义完对象后通过"."为其添加属性和方法,也可以使用字面量赋值方法在定义对象的时候为其添加属性和方法,这样创建的对象,其方法和属性可以直接使用对象引用,类似于类的静态变量和静态函数,这样创建对象有一个明显缺陷——在定义大量对象的时候很费力,要一遍遍的写几乎是重复的代码。*/
var obj={};
obj.a=0;
obj.fn=function(){
console.log(this);
}
//调用对象函数
obj.fn();
var obj3={
a:0,
fn:function(){
return this.a;
}
}
//调用对象函数
console.log(obj3.fn());
/*用函数来做这些重复工作,在创建对象的时候调用一个专门创建对象的方法,对于不同的属性值只需要传入不同参数即可。*/
function createObj(a,fn){
var obj={};
obj.a=a;
obj.fn=fn;
return obj;
}
var objc=createObj(2,function(){
alert(this.a);
});
console.log(objc);
/*这样在创建大量对象的时候,就可以通过调用此方法来做一些重复工作了,这种方式也不完美,因为在很多时候需要判断对象的类型,上面代码创建出来的对象都是最原始的Object对象实例,只是拓展了一些属性和方法。*/
//1. function可以接受参数,可以根据参数来创建相同类型不同值的对象
//2. function作为构造函数(通过new操作符调用)的时候会返回一个对象。
function Person(name){
this.name=name;
this.fn=function(){
console.log(this.name+'你好');
}
}
var person1=new Person('Byron');
person1.fn();
console.log(person1.name);
console.log(person1.constructor==Person);//true
console.log(person1 instanceof Person); //true
function Personcc(name){
this.name=name;
this.fn=function(){
alert(this.name);
}
}
var person1c=new Personcc('Byron');
var person2c=new Personcc('Frank');
console.log(person1c.fn==person2c.fn);//false
//一种近乎完美的构造对象的方式,及不用做重复工作
function Personss(name){
this.name=name;
}
Personss.prototype.share=[];
Personss.prototype.printName=function(){
alert(this.name);
}
var person1ss=new Personss('Byron');
var person2ss=new Personss('Frank');
person1ss.printName();
console.log(person1ss.name);
console.log(person1ss.share);
person2ss.printName();
console.log(person1ss.printName==person2ss.printName);//true
//在 JavaScript中,几乎所有的事物都是对象。
//从JavaScript定义上讲对象是无序属性的集合,其属性可以包含基本值、对象或函数。也就是说对象是一组没有特定顺序的属性,每个属性会映射到一个值上,是一组键值对,值可以是数据或对象。
//对象也是一个变量,但对象可以包含多个值(多个变量)。
//简单的对象
var car = {type:"Fiat", model:500, color:"white"};
var obj2=new Object();
obj2.a=1;
obj2.b=2;
console.log(car); //Object {type: "Fiat", model: 500, color: "white"}
console.log(obj2); //Object {a: 1, b: 2}
/*可以在定义完对象后通过"."为其添加属性和方法,也可以使用字面量赋值方法在定义对象的时候为其添加属性和方法,这样创建的对象,其方法和属性可以直接使用对象引用,类似于类的静态变量和静态函数,这样创建对象有一个明显缺陷——在定义大量对象的时候很费力,要一遍遍的写几乎是重复的代码。*/
var obj={};
obj.a=0;
obj.fn=function(){
console.log(this);
}
//调用对象函数
obj.fn();
var obj3={
a:0,
fn:function(){
return this.a;
}
}
//调用对象函数
console.log(obj3.fn());
/*用函数来做这些重复工作,在创建对象的时候调用一个专门创建对象的方法,对于不同的属性值只需要传入不同参数即可。*/
function createObj(a,fn){
var obj={};
obj.a=a;
obj.fn=fn;
return obj;
}
var objc=createObj(2,function(){
alert(this.a);
});
console.log(objc);
/*这样在创建大量对象的时候,就可以通过调用此方法来做一些重复工作了,这种方式也不完美,因为在很多时候需要判断对象的类型,上面代码创建出来的对象都是最原始的Object对象实例,只是拓展了一些属性和方法。*/
//1. function可以接受参数,可以根据参数来创建相同类型不同值的对象
//2. function作为构造函数(通过new操作符调用)的时候会返回一个对象。
function Person(name){
this.name=name;
this.fn=function(){
console.log(this.name+'你好');
}
}
var person1=new Person('Byron');
person1.fn();
console.log(person1.name);
console.log(person1.constructor==Person);//true
console.log(person1 instanceof Person); //true
function Personcc(name){
this.name=name;
this.fn=function(){
alert(this.name);
}
}
var person1c=new Personcc('Byron');
var person2c=new Personcc('Frank');
console.log(person1c.fn==person2c.fn);//false
//一种近乎完美的构造对象的方式,及不用做重复工作
function Personss(name){
this.name=name;
}
Personss.prototype.share=[];
Personss.prototype.printName=function(){
alert(this.name);
}
var person1ss=new Personss('Byron');
var person2ss=new Personss('Frank');
person1ss.printName();
console.log(person1ss.name);
console.log(person1ss.share);
person2ss.printName();
console.log(person1ss.printName==person2ss.printName);//true