wns9778.com_威尼斯wns.9778官网

热门关键词: wns9778.com,威尼斯wns.9778官网
wns9778.com > 计算机教程 > javascript 之对象-13

原标题:javascript 之对象-13

浏览次数:139 时间:2019-05-19

对象

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

http://www.bkjia.com/Javascript/506738.htmlwww.bkjia.comtruehttp://www.bkjia.com/Javascript/506738.htmlTechArticle重点介绍JavaScript中几个重要的属性(this、constructor、prototype),这些属性对于我们理解如何实现JavaScript中的类和继承起着至关重要的作用...

函数也是对象

每个函数都是Function 的实例/对象,所以函数名是一个指向函数对象的指针,这个对象跟其他对象一样具有属性,方法;

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

Function 构造函数可以接收任意数量参数作为参数,但是最后一个参数始终是函数体,前面的参数则看成是函数的形参;

 

对象——若干属性的集合

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)

重点介绍JavaScript中几个重要的属性(this、constructor、prototype),这些属性对于我们理解如何实现JavaScript中的类和继承起着至关重要的作用。
this
this表示当前对象,如果在全局作用范围内使用this,则指代当前页面对象windows; 如果在函数中使用this,则this指代什么是根据运行时此函数在什么对象上被调用。 我们还可以使用apply和call两个全局方法来改变函数中this的具体指向。
先看一个在全局作用范围内使用this的例子:

创建对象

1、字面量

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

2、构造函数

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

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

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

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

New 操作符

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

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

用代码来表示:

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);

// 定义一个全局函数 function foo() { console.log(this.fruit);
} //定义一个全局变量 var fruit = "apple";
//自定义一个对象 var pack = { fruit: "orange" };
//等价于window.foo(); foo.apply(window);
// "apple"
//此时foo中的this ===pack foo.apply(pack);
 // "orange"
注:apply和call两个函数的作用相同,唯一的区别是两个函数的参数定义不同。
因为在JavaScript中函数也是对象,所以我们可以看到如下有趣的例子:

// 定义一个全局函数 function foo() { if (this === window) { console.log("this iswindow.");
}
} //函数foo也是对象,所以可以定义foo的属性boo为一个函数foo.boo = function() { if (this === foo) {console.log("this is foo.");
} else if (this === window) {console.log("this is window.");
} };
 //等价于window.foo();
foo();
// this is window.
//可以看到函数中this的指向调用函数的对象 foo.boo();
// this is foo.
//使用apply改变函数中this的指向 foo.boo.apply(window);
// this is window.
prototype
我们已经在第一章中使用prototype模拟类和继承的实现。 prototype本质上还是一个JavaScript对象。 并且每个函数都有一个默认的prototype属性。
如果这个函数被用在创建自定义对象的场景中,我们称这个函数为构造函数。 比如下面一个简单的场景:

<scripttype="text/javascript"> console.log(this === window);
// trueconsole.log(window.alert === this.alert);
// true console.log(this.parseInt("021",
10));
//
10 </script>
函数中的this是在运行时决定的,而不是函数定义时,如下:

本文由wns9778.com发布于计算机教程,转载请注明出处:javascript 之对象-13

关键词: wns9778.com

上一篇:oracle-约束-序列

下一篇:没有了