javascript 之对象-13

对象

无序属性的集合,属性能够包含基本值、对象或者函数,简单理解为对象是若干属性的集合;
咱们常说的面向对象(oop)编程实际上是指的一种编码的思想,简单理解为用对象来封装数据,利用封装、继承、多态对代码进行复用、重构、以及解耦等;javascript

函数也是对象

每一个函数都是Function 的实例/对象,因此函数名是一个指向函数对象的指针,这个对象跟其余对象同样具备属性,方法;java

 1  //函数声明
 2     function sayName(){
 3 
 4     }
 5     //函数表达式
 6     var sayNmae=function(){
 7 
 8     }
 9     //Function 构造函数
10     var sayName=new Function()

Function 构造函数能够接收任意数量参数做为参数,可是最后一个参数始终是函数体,前面的参数则当作是函数的形参;编程

建立对象

一、字面量数组

   //字面量
    var p={name:'Joel',age:22}

二、构造函数函数

系统自带:new Object(), Array(), Number(),Boolean(), Date()oop

var p=new Object();
    p.name='Joel';
    p.age='22';

自定义:为了和普通函数区分,首字母大写,用来构造对象的咱们称为构造函数this

  function Person(name){
        this.name=name;
        this.age=age;
    }
    var p=new Person('Joel',22);

New 操做符编码

MDN上是这样说的:
当代码 new Foo (...) 执行时:spa

  • 一个新对象被建立,它继承自 Foo .prototype。
  • 使用指定的参数调用构造函数 Foo,并将 this绑定到新建立的对象。 new Foo 等同于 new Foo (),只能用在 Foo 不传递任何参数的状况。
  • 若是构造函数返回了一个“对象”,那么这个对象会取代整个 new出来的结果。若是构造函数没有返回对象,那么 new出来的结果为步骤1建立的对象。(通常状况下构造函数不返回任何值,不过用户若是想覆盖这个返回值,能够本身选择返回一个普通对象来覆盖。固然,返回数组也会覆盖,由于数组也是对象。)

用代码来表示:prototype

1 var o = new Object(); //建立对象
2 o.[[prototype]] = Foo.prototype;//建立的对象内部指针[[prototype]] 指向Foo的原型对象
3 Foo.call(o); //用建立的对象来绑定this 指针

因此,当咱们执行new Person('Joel',22)时,javascript会:

var o = new Object();
o.__proto__ = Person.prototype;
A.call(o);

将建立的o对象返回给p;即完成var p=new Person('Joel',22);

对象——若干属性的集合

java或者C#中的对象都是new一个class,并且里面有字段、属性、方法,规定的很是严格。可是javascript就比较随意了,数组是对象,函数是对象,对象仍是对象。对象里面的一切都是属性,只有属性,没有方法。那么这样方法如何表示呢?方法也是一种属性。由于它的属性表示为键值对的形式。并且,javascript中的对象能够任意的扩展属性,没有class的约束。

 1  var p={
 2         name:'Joel',
 3         age:22,
 4         sayName:function(){
 5             console.log(this.name);
 6         },
 7         run:function(){
 8             //TODO
 9         }
10     }
11     p.a=20;
12     console.log(p.a)
相关文章
相关标签/搜索