标签:数学 环境 push object 存在 creat 推荐 相互 定义
// 定义工厂函数
function createPerson(name, age, hobby) {
// 创建一个临时object对象
var obj = new Object();
// 将工厂函数的参数赋值给临时对象
obj.name = name;
obj.age = age;
obj.hobby = hobby;
obj.sayName = function() {
console.log("我的名字叫:"+this.name);
}
// 返回这个包装好的临时对象
return obj;
}
//使用工厂函数创建对象
var p1 = createPerson(‘Tom‘, 12, "sing");
var p2 = createPerson(‘mayra‘, 18, "draw");
// 定义构造函数
function Person(name, age, hobby) {
this.name = name;
this.age = age;
this.hobby = hobby;
this.sayName = function() {
console.log("我的名字叫:"+this.name);
}
}
// 使用构造函数实例化
var p1 = new Person(‘Tom‘, 12, "sing");
var p2 = new Person(‘mayra‘, 18, "draw");
// 定义构造函数
function Person() {
}
// 定义原型
Person.prototype = {
constructor: Person, //重写constructor
name: ‘Tom‘,
books: [‘数学‘,‘英语‘], // 引用类型
country: "china", // 共享属性
sayName: function () { // 共享方法
console.log("我的名字叫:" + this.name);
},
};
// 使用构造函数实例化
var p1 = new Person();
var p2 = new Person();
p1.books.push(‘语文‘);
console.log(p1.books); // ‘数学‘,‘英语‘,‘语文‘
console.log(p2.books); // ‘数学‘,‘英语‘,‘语文‘ p1实例影响到p2!!!
// 定义构造函数
function Person(name, age, hobby) {
this.name = name;
this.age = age;
this.hobby = hobby;
this.books = [‘数学‘,‘英语‘]; //引用类型
}
// 定义原型(定义共享的属性)
Person.prototype = {
constructor: Person, //重写constructor
country: "china", // 共享属性
sayName: function () { // 共享方法
console.log("我的名字叫:" + this.name);
},
};
// 使用构造函数实例化
var p1 = new Person(‘Tom‘, 12, "sing");
var p2 = new Person(‘mayra‘, 18, "draw");
p1.books.push(‘语文‘);
console.log(p1.books); // ‘数学‘,‘英语‘,‘语文‘
console.log(p2.books); // ‘数学‘,‘英语‘ p1实例不会影响到p2!!!
console.log(p1.country); // china
console.log(p2.country); // china
p1.sayName(); // 我的名字叫:Tom
p2.sayName(); // 我的名字叫:mayra
特点:将所有信息都封装在构造函数类,动态初始化原型
// 定义构造函数
function Person(name, age, hobby) {
this.name = name;
this.age = age;
this.hobby = hobby;
// 判断当前是否具有sayName方法,没有就初始化原型添加该方法
if(typeof this.sayName != ‘function‘) {
// 这个只会在第一次使用构造函数时执行
Person.prototype.sayName = function () {
console.log("我的名字叫:" + this.name);
}
}
}
// 使用构造函数实例化
var p1 = new Person(‘Tom‘,13,‘sing‘);
var p2 = new Person(‘bob‘,16,‘draw‘);
p1.sayName();
p2.sayName();
function Person(name, age, hobby) {
// 创建一个临时object对象
var obj = new Object();
// 将参数赋值给临时对象
obj.name = name;
obj.age = age;
obj.hobby = hobby;
obj.sayName = function() {
console.log("我的名字叫:"+this.name);
};
// 返回这个包装好的临时对象
return obj;
}
//使用函数创建对象
var p1 = new Person(‘Tom‘, 12, "sing");
var p2 = new Person(‘mayra‘, 18, "draw");
function Person(name) {
// 创建一个临时object对象
var obj = new Object();
obj.sayName = function() {
console.log(this.name);
};
// 返回这个包装好的临时对象
return obj;
}
//函数创建对象
var p1 = new Person(‘Tom‘);
var p2 = new Person(‘mayra‘);
p1.sayName(); //Tom 只能通过这一种方式访问name的值
7中创建对象的方式(工厂模式、构造函数模式、原型模式、动态原型模式等分析)
标签:数学 环境 push object 存在 creat 推荐 相互 定义
原文地址:https://www.cnblogs.com/mengjingmei/p/9383372.html