java的如何创建js_JS对象的创建方式

一、字面量方式

var obj = {

name: 'mm',

age: 18,

sayName: function() {

console.log(this.name);

}

}

问题:创建多个对象时会造成代码冗余,很占内存空间。

二、工厂模式

function createToy(name) {

var o = new Object();

o.name = name;

o.say = function() {

console.log(this.name);

}

return o;

}

var toy1 = createToy('car');

toy1.say();

var toy2 = createToy('taxi');

toy2.say();

var toy3 = createToy('bus');

toy3.say();

console.log(toy1 instanceof Object);

console.log(toy2 instanceof Object);

console.log(toy3 instanceof Object);

问题:虽然解决了对象字面量创造对象冗余的问题,但是存在对象识别的问题。

三、构造函数模式

function Toy(name) {

this.name = name;

this.say = function() {

console.log(this.name);

}

}

var toy1 = new Toy('car');

var toy2 = new Toy('car');

console.log(toy1.constructor);

console.log(toy2.constructor);

console.log(toy1.say === toy2.say); // false

问题:解决了工厂模式的问题,但是相同方法重复创建就浪费了内存空间。

四、原型模式

function Person() {};

Person.prototype = {

constructor: Person,

name: 'mm',

friends: ['mike','helen'],

say: function() {

console.log(this.name);

}

}

var toy1 = new Person('train');

var toy2 = new Person('bus');

toy1.friends.push('suhai');

console.log(toy1.friends);

console.log(toy2.friends);

问题:共享方法,解决了构造函数的问题。但是当前实例的引用类型的属性被所有实例共享。

五、组合模式(构造函数+原型模式)

function Person(name) {

this.name = name;

this.friends = ['mike','helen'];

};

Person.prototype = {

constructor: Person,

say: function() {

console.log(this.name);

}

}

var toy1 = new Person('train');

var toy2 = new Person('bus');

toy1.friends.push('suhai');

console.log(toy1.friends);

console.log(toy2.friends);

这是常用的创建方式。

通过构造函数模式定义实例属性,通过原型模式定义方法和共享的属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值