js 创建对象的方式

看了http://mp.weixin.qq.com/s/Dbtv9hsaAcSDo8F1gj_N7Q 前端大全的文章, 感觉还是自己总结一下,映像会比较深刻。

  对象字面量方式  Object构造函数方式
案例 var person = {
  name:‘11‘,
  age:18,
  sayName: function(){
    console.log(this.name);
  }
}

var person = new Object();

person.name=‘111‘;

person.age=18;

person.sayName=function(){

  console.log(this.name);

}

优点    
缺点
1. 慢

  var Obj = function() {};

  var a = {};

  var b = new Object(

  var c = new Obj();

  c最快 a,b 慢一些

2. 批量的生产对象, 代码多

 

   工厂模式 构造函数模式   原型模式
案例

function createPerson(name, job){
var person = new Object();
person.name = name;
person.job = job;
person.sayName = function(){
consol.log(this.name);
}
return person;
}

var person1 = createPerson(‘11‘,‘11job‘);
var person2 = createPerson(‘22‘,‘22job‘);


function Person(name,job){

  this.name = name;

  this.job = job;

  this.sayName = function(){

    consol.log(this.name);

  }

}

var person1 = new Person(‘11‘,‘11job‘);

var person2 = new Person(‘22‘,‘22job‘);

创建一个新对象

这个新对象会被执行[[prototype]]链接

这个新对象会绑定到函数调用的this

返回这个对象

function Person() {

}

Person.prototype.name = ‘Jiang‘

Person.prototype.job = ‘student‘

Person.prototype.sayName = function() {

console.log(this.name)

}

var person1 = new Person()

优点 批量生产  person1 instanceof Person //ture  所有的实例对象共享它所包含的属性和方法
缺点
没有解决对象识别问题


上面的this指向Person的一个对象,

每个对象都会有一个sayName 方法,会浪费资源


1.Person.prototype设置为等于一个以对象字面量形式创建的对象

,但是会导致.constructor不在指向Person了。

Object.defineProperty(Person.prototype, ‘constructor‘, {

enumerable: false,

value: Person

})

2.原型中所有属性实例是被很多实例共享的,这种共享对于函数非常合适。

对于那些包含基本值的属性也勉强可以,毕竟实例属性可以屏蔽原型属性。

但是引用类型值,就会出现问题了

function Person() {

}

Person.prototype = {

name: ‘jiang‘,

friends: [‘Shelby‘, ‘Court‘]

}

var person1 = new Person()

var person2 = new Person()

person1.friends.push(‘Van‘)

console.log(person1.friends) //["Shelby", "Court", "Van"]

console.log(person2.friends) //["Shelby", "Court", "Van"]

console.log(person1.friends === person2.friends) // true

  组合使用构造函数模式和原型模式 寄生构造函数模式 动态原型模式  稳妥构造函数模式
案例
function Person(name) {

this.name = name

this.friends = [‘Shelby‘, ‘Court‘]

}

Person.prototype.sayName = function() {

console.log(this.name)

}

var person1 = new Person()

var person2 = new Person()

person1.friends.push(‘Van‘)

console.log(person1.friends)  //["Shelby", "Court", "Van"]

console.log(person2.friends) // ["Shelby", "Court"]

console.log(person1.friends === person2.friends) //false


function Person(name, job) {

var o = new Object()

o.name = name

o.job = job

o.sayName = function() {

console.log(this.name)

}

return o

}

var person1 = new Person(‘Jiang‘, ‘student‘)

person1.sayName()


function Person(name, job) {

// 属性

this.name = name

this.job = job

// 方法

if(typeof this.sayName !== ‘function‘) {

Person.prototype.sayName = function() {

console.log(this.name)

}

}

}

var person1 = new Person(‘Jiang‘, ‘Student‘)

person1.sayName()

function Person(name, job) {

var o = new Object()

o.name = name

o.job = job

o.sayName = function() {

console.log(name)

}

return o

}

var person1 = Person(‘Jiang‘, ‘student‘)

person1.sayName()

优点      可以重写调用构造函数时返回的值  
缺点        instanceof操作符对他们没有意义
时间: 2024-10-05 09:41:26

js 创建对象的方式的相关文章

JS创建对象的方式

第一种:基于Object对象 var person = new Object(); person.name = 'My Name'; person.age = 18; person.getName = function(){ return this.name; } 第二种:对象字面量方式(比较清楚的查找对象包含的属性及方法) var person = { name : 'My name', age : 18, getName : function(){ return this.name; } }

js创建对象的方式 三种

1. 使用直接量创建1个对象: var aobj = { x : 10, y : function(){ console.log("aobj--> "+this.x); } } aobj.y();//对象自己的方法要用自己的属性,必须使用this.属性名 this.读作"当前对象的"//何时使用:只创建一个单独对象时 2.使用构造函数创建多个统一结构的对象 //Step1: 定义构造函数function cobj (name,age){ this.name =

js创建对象的多种方式及优缺点

在js中,如果你想输入一个的信息,例如姓名,性别,年龄等,如果你用值类型来存储的话,那么你就必须要声明很多个变量才行,变量声明的多了的话,就会造成变量污染.所以最好的方式就是存储到对象中.下面能我就给大家介绍几种创建对象的方式,并且给大家说一下他们的优缺点 方式一:对象字面量 var obj={ name:"赵云", type:"突进", skill:"抢人头" } 缺点:只能创建一次对象,复用性较差,如果要创建多个对象,代码冗余度太高 方式二:

js几种创建对象的方式

//1.0.1 定义js对象的方式1 function c01DefineObj1() { var obj = new Object(); obj.Name = "八戒"; obj.Age = 500; obj.Say = function () { //alert("Name=" + obj.Name + ", Age=" + obj.Age); alert("Name=" + this.Name + ", Age

js创建对象的四种方式以及消耗时间比较

// Property-less object console.time('zoop1'); var zoop = (function (numObjects) { var pooz = Object.create(null); for(var i = 0; i< numObjects; i++) { pooz[i] = Object.create(null); } return pooz; })(1000000); console.timeEnd('zoop1'); // Using Obje

JS创建对象方式

一.对象:对个数据的封装体,保存多个数据的容器(可以统一管理多个数据) 1.分类 1)内建对象:由ES标准定义的对象,在任何ES的实现都可以使用 例如:Math String Number Function Object 2)宿主对象:由JS运行环境提供的对象 例如:DOM BOM 3)自定义对象:用户自己定义的 2.组成: -属性:由属性名(字符串)和属性值(任意类型)构成 -方法:一种特殊的属性(属性值是函数) 3.访问对象内部的数据 -对象.属性名:属性名不确定(变量):属性名有特殊字符时

js 创建对象的多种方式

参考: javascript 高级程序设计第三版 工厂模式 12345678910 function (name) { var obj = new Object() obj.name = name obj.getName = function() { console.log(this.name) } return obj} var person1 = createPerson('jack') 缺点:对象无法识别,所有实例都指向同一个原型 构造函数模式 1234567 function Perso

07.30《JavaScript》——JS创建对象的三种方式

1.第一种创建对象的方式:先定义类再创建对象 // 第一种创建对象的方式:先定义类再创建对象 function stu(sno, name, age){ this.sno = sno; this.name = name; this.age = age; this.study = function(){ alert("学号为"+this.sno+"的学生,姓名叫做"+this.name+",正在努力学习,年龄为"+this.age); } } va

JS创建对象的几种方式整理

javascript是一种"基于prototype的面向对象语言",与java有非常大的区别,无法通过类来创建对象.那么,既然是面象对象的,如何来创建对象呢? 一:通过"字面量"方式创建对象 方法:将成员信息写到{}中,并赋值给一个变量,此时这个变量就是一个对象 列如: var person={"name":"abc","age":22,work:function(){console.loh(1)}} 如果