现在的位置: 首页 > 综合 > 正文

Javascript之二(2):js6种创建类/对象的方法

2018年02月18日 ⁄ 综合 ⁄ 共 2249字 ⁄ 字号 评论关闭
// 第一种:对象
var person = {};// 或者var obj = new Object();
person.name = "king";
person.age = 20;
person.Introduce = function () {
	alert("My name is " + this.name + ". My age is " + this.age);
};
person.Introduce();

// 第二种:json格式的对象
var person = {
	name: "king",
	age: 20,
	Introduce: function () { 
		alert("My name is " + this.name + ". My age is " + this.age); 
	}
};
person.Introduce(); 
alert(person.name);// king

// 第三种(1):类,类似于默认构造函数
var Person = function () {
	this.name = "king";
	this.age = 20;
	this.Introduce = function () {
		alert("My name is " + this.name + ". My age is " + this.age);
	};
};
var person = new Person();// 或者var person = Person();
person.Introduce();
alert(person.name);// 输出:king
alert(person["name"]);// 也可以使用json的访问方式,说明使用function定义类与第二种是等效的
alert(person.age);// 输出:20

// 第三种(2):区别仅在于第一行的声明
function Person () {
	this.name = "king";
	this.age = 20;
	this.Introduce = function () {
		alert("My name is " + this.name + ". My age is " + this.age);
	};
};
var person = new Person();
person.Introduce();
alert(person.name);// 输出:king
alert(person.age);// 输出:20

// 第四种(1):可定制的类,类似构造函数
var Person = function (name, age) {
	this.name = name;
	this.age = age;
	this.Introduce = function () {
		alert("My name is " + this.name + ". My age is " + this.age);
	};
};
var person = new Person("king", 20);
person.Introduce();
alert(person.name);// 输出:king
alert(person.age);// 输出:20

// 第四种(2):
function Person (name, age) {
	this.name = name;
	this.age = age;
	this.Introduce = function () {
		alert("My name is " + this.name + ". My age is " + this.age);
	};
};
var person = new Person("king", 20);
person.Introduce();
alert(person.name);// 输出:king
alert(person.age);// 输出:20

// 第五种:变量的封装,将其改为私有。采用了闭包。
// 在function中用this引用当前对象,通过对属性的赋值来声明属性。即this定义的为公有
// 如果用var声明变量,则该变量为局部变量,只允许在类定义中调用。即var定义的为私有,不用var则为全局
var Person = function (name, age) {
	var name = name;
	var age = age;
	this.GetName = function () {
		return name;
	}
	this.GetAge = function () {
		return age;
	}
	this.Introduce = function () {
		alert("My name is " + name + ". My age is " + age);
	};
};
var person = new Person("king", 20);
alert(person["name"]);// undefined
alert(person.GetName());// king

// 第五种(2):可参考第三种(2)和第四种(2)

// 第六种(1):在函数体中创建一个对象(使用第二种),声明其属性再返回
function Person() {
	var obj =
	{
		'age':20,
		'name':'king'
	};
	return obj;
}
var person = new Person();
alert(person.age);// 输出:20
alert(person.name);// 输出:king

// 第六种(2):函数体内创建对象时使用第一种方法
function Person() {
	var obj = new Object();
	obj.age = 20;
	obj.name = 'king';
	return obj;
}
var person = new Person();
alert(person.age);// 输出:20
alert(person.name);// 输出:king

小结:上述第一种、第二种方法为直接创建一个对象字面量。第二种到第六种方法相当于提供了类,使用new操作符(可省略)创建对象实例。

抱歉!评论已关闭.