对象模式

浅复制

var person = {

   name:"zhu",

   say:function(){

   console.log(this.name);

    }

}

//person 为xiao的原型对象

var xiao = Object.create(person);

深拷贝

function deepCopy(p, c) {

var c = c || {};

for (var i in p) {

if (typeof p[i] === 'object') {

c[i] = (p[i].constructor === Array) ? [] : {};

deepCopy(p[i], c[i]);

} else {   c[i] = p[i];  }

}return c;

}

工厂模式:

是在函数内创建一个对象,给对象赋予属性及方法再将对象返回即可

例子:

function xyy(name){

var obj = new Object();

obj.name =name;

obj.show = function(){

alert(this.name);

}

return obj;

}

var obj = xyy('abc');

构造函数

function xyy(name){

this.name = name;

this.show = function(){

alert(this,name);

  }

}

var obj = new xyy('abc');

构造函数和工厂模式的差别:

函数名首写字母为大写

(虽然标准没有严格规定首写字母为大写,但按照惯例,构造函数的首写字母用大写)

没有显示的创建对象

直接将属性和方法赋值给了this对象

没有return语句

使用new创建对象

能够识别对象(这正是构造函数模式胜于工厂模式的地方)

构造函数的缺点:

使用构造函数的最大的问题在于每次创建实例的时候都要重新创建一次方法(理论上每次创建对象的时候对象的属性均不同,而对象的方法是相同的),然而创建两次完全相同的方法是没有必要的,也浪费内存

原型模型:

我们创建的每个函数都有prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。使用原型对象的好处就是可以让所有对象实例共享它所包含的属性及方法。

例子:

function xyy(name){

this.name = name;

}

xyy.prototype.show = function(){

alert(this.name);

}

例子2:构造函数和原型模型的组合

//构造函数

function xyy(name,age,add){

this.name = name;

this.age=age;

this.add=add;

}

xyy.prototype={

//constructor属性,指向它们的构造函数。

constructor:xyy,

say:function(){

console.log(this.name);

}

name:hahaha,

age:20,

}

var xiao =new xyy('xyy',21,''sz');

delete xiao.name;

console.log(xiao.name);

//hasOwnProperty() 方法用来判断某个对象是否含有指定的自身属性。

console.log(xiao.hasOwnProperty);

var zou = new Person('zou',20,'GZ');

console.log(zou.hasOwnProperty("name"));

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,378评论 2 17
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 6,365评论 1 10
  • 三、闭包和高阶函数 3.1 闭包 3.1.1 变量的作用域 所谓变量的作用域,就是变量的有效范围。通过作用域的划分...
    梁同学de自言自语阅读 5,328评论 0 6
  • ECMAScript关键字 delete do else finally function in instance...
    doudou2阅读 3,980评论 0 0
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,456评论 0 4