javascript创建对象(一)

对象定义:无序属性的集合,属性包含基本值、对象、函数,相当于一组没有特定顺序的值。

   创建自定义对象最简单的方式就是:

1 var movie=new Object();
2 movie.name="Interstellar";
3 movie.year=2014;
4 movie.country="American";
5 movie.playMovie=function(){
6     alert(this.name);
7 };

当然还可以写成对象自变量的方式:

var movie={
      name:"Interstellar",
      year:2014,
      country:"American",
      playMovie:function(){
        alert(this.name);
}
};

上面两种都有明显的缺点:如果使用同一个接口创建很多对象,那么会产生大量的重复代码

 所以出现了工程模式,还是以前面的例子来修改:

function showMovie(name,year,country){
        var p=new Object();
        p.name=name;
        p.year=year;
        p.country=country;
        p.playMovie=function(){
           alert(this.name);
};
   return p;
}

用的时候直接赋给一个变量:

var movie1=showMovie("Interstellar",2014,"American");

var movie2=showMovie("FleetofTime",2014,"China");

工厂模式虽然解决了创建多个相似对象的问题,但是没有解决对象识别的问题(怎样知道一个对象的类型),

于是构造函数出现,接着前面例子修改:

function Movie(name,year,country){
      this.name=name;      this.year=year;
      this.country=country;

      this.playMovie=function(){
            alert(this.name);
};
}
//注意:
//这里没有return,没有显示的创建对象,把方法和属性都赋给了this对象;
//构造函数始终应该以一个大写字母开头,而非构造函数则以小写开头;

这里有几种调用构造函数的方式:

第一种通过new操作符:

var movie1=new Movie("Interstellar",2014,"American");

var movie2=new Movie("FleetofTime",2014,"China");

movie1、movie2都有一个constructor属性,指向Movie

alert(movie1.constructor==Movie);//true
alert(movie2.constructor==Movie);//true;

当然检测对象类型instanceof操作符要更可靠一些

alert(movie1 instanceof Movie);//true
alert(movie2 instanceof Movie);//true
alert(movie1 instanceof Object);//true
alert(movie2 instanceof Object);//true

注意的是所有对象都继承自Object;

第二种调用是把它作为普通的函数来调用,那么属性和方法都被添加到window对象了撒:

Movie("Interstellar",2014,"American");
window.playName();// "Interstellar"

第三种就是通过call()(apply())来到另一个对象的作用域中调用:

var p=new Object();
Movie.call(p,"FleetOfTime",2014,"China");
p.playMovie();//FleetOfTime

  以上就是调用构造函数的三种方式了,那么构造函数有什么问题呢,可以试着执行下面代码发现不同实例上的同名函数不相等

alert(movie1.playMovie==movie2.playMovie)//false

//构造函数主要的问题就是每个方法都要在每个实例上重新创建一遍

 我们可以通过把函数定义转移到构造函数外面来解决这个问题,如下:

function Movie(name,year,country){
      this.name=name;
      this.year=year;
      this.country=country;
     this.playMovie=playMovie;
}
 funciton playMovie(){

    alert(this.name);
}
//这里构造函数里面的playMovie包含一个指向函数的指针

  但是如果对象需要定义很多方法,那么就需要定义很多个全局函数了。所以出现了原型模式,当然原型模式也会存在问题,目前一般是运用构造函数+原型的组合方法来创建对象。见下节。。

最后:1937年12月13日,侵华日军野蛮侵入南京,制造了惨绝人寰的南京大屠杀惨案,30万同胞惨遭杀戮,无数妇女遭到蹂躏残害,无数儿童死于非命,三分之一建筑遭到毁坏,大量财物遭到掠夺。侵华日军一手制造的这一灭绝人性的大屠杀惨案,是第二次世界大战史上“三大惨案”之一,是骇人听闻的反人类罪行,是人类历史上十分黑暗的一页,勿忘国耻。

  

  

 

  

  

时间: 2024-10-06 01:20:25

javascript创建对象(一)的相关文章

Javascript 创建对象方法的总结(每天一些学习真的很快乐)

使用Javascript创建对象的方法有很多,现在就来列举一下: 1. 使用Object构造函数来创建一个对象,下面代码创建了一个person对象,并用两种方式打印出了Name的属性值. var person = new Object(); person.name="kevin"; person.age=31; alert(person.name); alert(person["name"]) 2. 使用对象字面量创建一个对象:不要奇怪person["5&

Javascript创建对象方法

1.工厂模式:及时由一个工厂类根据传入的参数决定生产那种产品类 function createPerson(name,age,job) { var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function() { alert(this.name); } return o; } var person = createPerson("xiaoqiang",12,"student&

Javascript 创建对象方法的总结

最近看了一下<Javascript高级程序设计(第三版)>,这本书很多人都推荐,我也再次郑重推荐一下.看过之后总得总结一下吧,于是我选了这么一个主题分享给大家. 使用Javascript创建对象的方法有很多,现在就来列举一下: 1. 使用Object构造函数来创建一个对象,下面代码创建了一个person对象,并用两种方式打印出了Name的属性值. var person = new Object(); person.name="kevin"; person.age=31; a

【译】JavaScript 创建对象: 方法一览与最佳实践

本文是我在众成翻译上认领并翻译的:JavaScript 创建对象: 方法一览与最佳实践 在JavaScript中“创建对象”是一个复杂的话题.这门语言提供了很多种创建对象的方式,不论新手还是老手都可能对此感到无所适从,不知道应该选择哪一种.不过,尽管创建对象的方法很多,看上去语法差异也很大,但实际上它们的相似性可能比你所以为的要多.本文将带领你踏上一段梳理对象创建方法的旅程,为你揭示不同方法之间的依赖与递进关系. 对象字面量 我们的第一站毫无疑问就是创建对象最简单的方法,对象字面量.JavaSc

JavaScript 创建对象的七种方式

转自:xxxgitone.github.io/2017/06/10/JavaScript创建对象的七种方式/ JavaScript创建对象的方式有很多,通过Object构造函数或对象字面量的方式也可以创建单个对象,显然这两种方式会产生大量的重复代码,并不适合量产.接下来介绍七种非常经典的创建对象的方式,他们也各有优缺点. 工厂模式 1 function createPerson(name, job) { 2 var o = new Object() 3 o.name = name 4 o.job

理解JavaScript创建对象的不同模式

ps:前端渣第一次写博客,排版什么的还不清楚,后续会慢慢改进. 时隔两个月再次温习前端,发现很多东西都忘了,昨天刚看到constructor和prototype一脸懵逼,回去查资料和看书,对对象的理解又比从前啃书的时候更加深入.本文仅对JavaScript创建对象的各种模式进行辅助性的理解,有错误的地方欢迎指正. 创建对象 字面量对象 var person = { name:"myName", age:"18", sayName:function(){ alert(

javascript创建对象的相关问题

javascript创建对象的方法有很多种,一般来说,推荐使用对象字面量来创建对象. 对象构造函数捕捉 使用new Object来创建对象,可能会带来一些问题: var o = new Object(); console.log(o.constructor === Object);//true var o = new Object(1); console.log(o.constructor === Object);//false console.log(o.constructor === Num

Javascript创建对象几种方法解析

Javascript创建对象几种方法解析 Javascript面向对象编程一直是面试中的重点,将自己的理解整理如下,主要参考<Javascript高级程序设计 第三版>,欢迎批评指正. 通过字面量形式,创建对象: var person_1 = { name: "userName", age: 20 } 工厂模式创建对象 通过一个构造函数接收参数的方式构造对象,可无数次调用这个函数,通过改变参数构造不同的对象 function createPerson(name,age){

补充:JavaScript 创建对象的七种方式

JavaScript创建对象的方式有很多,通过Object构造函数或对象字面量的方式也可以创建单个对象,显然这两种方式会产生大量的重复代码,并不适合量产.接下来介绍七种非常经典的创建对象的方式,他们也各有优缺点. 工厂模式 1 function createPerson(name, job) { 2 var o = new Object() 3 o.name = name 4 o.job = job 5 o.sayName = function() { 6 console.log(this.na

JavaScript创建对象(三)——原型模式

在JavaScript创建对象(二)--构造函数模式中提到,构造函数模式存在相同功能的函数定义多次的问题.本篇文章就来讨论一下该问题的解决方案--原型模式. 首先我们来看下什么是原型.我们在创建一个函数时,这个函数会包含一个属性prototype,这个属性是一个指针,它指向一个对象--该函数的原型对象,这就是原型,它包含了该函数类型的所有实例可共享的属性和方法,见下面示意图: 如图所示,声明了一个函数Person.在JavaScript中,一个函数被声明的同时就具有了一些属性,其中有一个叫做pr