对象简介

第一部分:

首先,可以用字典创建一个简单对象,

var cat= {
   name   :  'jack',
   age      :   '5',
   friends :   [ ' one cat ' , ' two cat ' ],
   run       :   function(){ console.log("cat is run") ;},
   eat       :   function(){ console.log(" cat is eat") ;}
}

现在用Json的键值对构建了一个最简单的对象。
如果要使用这个对象中的变量和函数,只需要按照json的使用规则来运行就可以了。

console.log(cat.name);
console.log(cat.age );
car.run;
car.eat;

在对象中,我们称变量为对象的属性,而函数称之为方法。(猫在现实中是一个动物的种类,而只有在定义了具体的属性后,才能有一个具体对象,对象的属性可以有,姓名、年龄、等值,猫可以有跑的方法,吃的方法等。)

类是对象的抽象,我们把拥有四肢,会瞄叫的这种动物抽出他们的共有特征,归为猫类,
对象是类的实例,而如果养了一只猫叫jack,这是具体化的一只猫。

第二部分:

我们用json创建了一个对象,但这个对象,不便于封装和引用,为了方便起见,对json构成的对象做基本的改进,以便我们调用。既然能后调用,而又能很好的封装的,可以是选择用一个函数;这种方式称为工厂方式构造对象。

 function cat(name,age,friends ){  //构造函数

        var obj = new  Object(); 
        obj.name=  name;
        obj.age  =  age;
        obj.friends= friends;
        obj.run  = function(a){
            console.log(this.name + ' run ' + a);};
        obj.eat = function(b){
            console.log(this.name + ' eat ' + b);};
    return obj;
    }
    ```
我们用函数构造出了一个对象,new是创建对象的关键字。为这个对象新建了属性和方法。追后用return返回了对象obj。
object()可以用来配合new定义一个空白的对象。然后可以在上面添加属性和方法。  
需要注意的是,在函数内部构建对象的时候,new关键字后面必须要大写才能够正确编译,否则会出现报错现象。
在引用对象的时候,我们只需要在函数写入实参后,就可以调用其中的属性和方法;

var cat_jack = cat('jack', '5',['cat_one','cat_two' ]);
cat_jack.run('round');
cat_jack.eat('milk');

用函数改进后的对象已经能够足够方便的创建出新的对象来,但是new关键字被写入了函数内部,我们应该将new关键字提取出来,

###第三部分
我们取消了在函数内部用new关键字构造出来的对象,然后用this来将原来的obj对象替换一下。然后把返回值取消。就创造出了一个构造函数。
取消return和在函数内部的new对象后,只保留属性和方法。
>所谓"构造函数",其实就是一个普通函数,但是内部使用了[this变量](http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html)。对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上。
this:可指当前的方法属于谁,在函数前面有new的情况下失效。 全局函数是window的方法,但是在前面加new以后 ,会在函数中自动新创建一个对象,并指向该对象。构造函数和普通函数区别在于调用前加new。

function cat(name,age,friends ){
this.name= name;
this.age = age;
this.friends= friends;
this.run = function(a){
console.log(this.name + ' run ' + a);};
this.eat = function(b){
console.log(this.name + ' eat ' + b);};
}

然后我们用新的对象来调用这个构造函数,既很容易创造出了一个对象。

var cat_jack = new cat('jack', '5',['cat_one','cat_two' ]);
cat_jack.run('round');
cat_jack.eat('milk');


###第四部分
在构造函数中,由于对形参传递参数的不确定和不便于书写,可以对参数用json数组进行抽取,

function cat(option ){
this.name= option.name;
this.age = option.age;
this.friends= option.friends;
this.run = function(a){
console.log(this.name + ' run ' + a);};
this.eat = function(b){
console.log(this.name + ' eat ' + b);};
}

 然后新建对象时,将传递实参修改为json格式。

var cat_jack = new Cat({name:'jack', age:'5',friends:['cat_one','cat_two' ]});
cat_jack.run('round');
cat_jack.eat('milk');

###第五部分
重新构建出来的对象的确可以正常运行,但是任然会存在美中不足的地方,在对象调用方法的时候,我们创建两个对象。cat_jack和 cat_maria 。

var cat_jack = new Cat({name:'jack', age:'5',friends:['cat_one','cat_two' ]});
cat_jack.run('round');
cat_jack.eat('milk');
var cat_maria = new Cat({name:'maria', age:'3',friends:['cat_one','cat_two' ]});
cat_maria.run('road');
cat_maria.eat('meet');

测试被调用的同一个方法后,输出值为false。原因就在于创建一个函数的时候同时也创建一个新的对象,每一次使用new,都会创造出一个新的对象。
```    alert(cat_jack.eat == cat_maria.eat);```
这样并不利于性能的提升,为了改进这一点,需要引出原型的定义。
prototype:让我们有能力向对象添加属性和方法,它的作用就是构造函数的一个共享库;所有数据将来都会被所有的新对象公用。  



###第六部分
将构造函数中的方法提取出来,另外单独使用原型设置;

function cat(option ){
this.name= option.name;
this.age = option.age;
this.friends= option.friends;

}

cat.prototype={
run : function(a){ console.log(this.name + ' run ' + a);},
eat : function(b){ console.log(this.name + ' eat ' + b);}
}

var cat_jack = new Cat({name:'jack', age:'5',friends:['cat_one','cat_two' ]});
cat_jack.run('round');
cat_jack.eat('milk');
var cat_maria = new Cat({name:'maria', age:'3',friends:['cat_one','cat_two' ]});
cat_maria.run('road');
cat_maria.eat('meet');

然后用alert(cat_jack.eat == cat_maria.eat)测试,得出的结果为true。


          
###第七部分

基本原理基本实现后,还可以对构造函数进一步简化,使用json抽取出参数,然后将属性和方法,使用json进行简单合并。




function cat(option){
this._init(option);
}
cat.prototype={
_init : function(option)
{
var option=option||{};
this.name= option.name;
this.age = option.age;
this.friends= option.friends },

   run : function(a){ console.log(this.name + ' run ' + a);},
   eat : function(b){ console.log(this.name + ' eat ' + b);}

}
var cat_jack = new Cat({name:'jack', age:'5',friends:['cat_one','cat_two' ]});
cat_jack.run('round');
cat_jack.eat('milk');
var cat_maria = new Cat({name:'maria', age:'3',friends:['cat_one','cat_two' ]});
cat_maria.run('road');
cat_maria.eat('meet');

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,165评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,503评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,295评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,589评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,439评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,342评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,749评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,397评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,700评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,740评论 2 313
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,523评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,364评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,755评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,024评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,297评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,721评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,918评论 2 336

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,517评论 18 139
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,197评论 0 4
  • 有个朋友,叫浅浅,在她身上人如其名才是最大的笑话,每次都爱的那么用力,到最后往往把自己弄得是遍体鳞伤,却又丝毫没有...
    薄薄薄薄薄_薄荷阅读 234评论 0 0
  • 虽然前方道路很遥远,但我想突破自我,我希望给自己的梦一个选择。 2016年的秋天,我从一所职业学校毕业出来。 其实...
    独木狼阅读 261评论 0 2
  • 2016-12-28-067 《管理的觉醒》 正文: 真正支配我们行为的并不是我们的想法,而是我们的感受,是...
    潍坊谷德DDM徐芳阅读 596评论 0 0