当前位置:Gxlcms > JavaScript > javascript 面向对象function详解及实例代码

javascript 面向对象function详解及实例代码

时间:2021-07-01 10:21:17 帮助过:27人阅读

javascript 面向对象function详解

    js中的函数有三种表示方式:

  1. //函数的第一种表示方式:函数关键字的方式
  2. function f1() {
  3. alert("f1");
  4. }
  5. //函数的第二种表示方式:函数字面量的方式
  6. var f2 = function() {
  7. alert("f2");
  8. }
  9. //函数的第三种表示方式:构造函数的方式
  10. var f3 = new Function('var a = 100; b = 200; return a+b;');
  11. alert(f3());

       函数的定义方式一般有以上三种,前两种方式基本没什么区别,第三种定义方式(Function()构造函数)每次执行时都解析函数主体,并创建一个新的函数对象。所以当在一个循环或者频繁执行的函数中调用Function()构造函数的效率是非常低的。相反,函数字面量却不是每次遇到都重新编译的。一般不会采用第三种方式。

另外,分别执行alert(f1.constructor); alert(f2.constructor); alert(f3.constructor);都会出现同样的效果,如下:

f1.constructor,f2.constructor,f3.constructor都是一个对象,为Function,这里可以这样理解,这三个函数f1,f2,f3都是通过Function的形式产生的,所以他们的构造器就是Function,由此也可以推出这三种函数的产生方式其实内部原理是一样的。

在JavaScript中,每个具有原型的对象都会自动获得constructor属性。对象的constructor属性用于返回创建该对象的函数,也就是我们常说的构造函数。实际上,在js中,每一个function都是一个Function Object。

总结:

1、在js中一切皆对象;

2、在js中对象有一个属性为constructor;

3、在js中,凡是函数都是构造器对象

另外,从面向对象的角度来理解,上面实例中f1是一个函数,同时它也是一个对象,constructor可以理解为它的一个属性,并且这里可以利用该对象的constructor属性找到它的构造函数。

可以为f1这个对象动态的添加属性:

  1. //给f1对象添加一个属性为b,值为5
  2. f1.b = 5;
  3. alert(f1.b);
  4. //给f1对象添加一个属性为bb,bb为对象,值为var f2 = function() { alert("f2");}
  5. f1.bb = f2;
  6. alert(f1.bb);

在js中,任何一个对象都有可能成为另一个对象的属性。

一个对象可以动态的添加任何一个属性,但是这个对象必须有值,不能是null和undefined。

  1. function Person() {
  2. //do something
  3. }
  4. function P() {
  5. //do something
  6. }
  7. function A() {
  8. //do something
  9. }
  10. function B() {
  11. //do something
  12. }
  13. Person.a = P;
  14. Person.a.b = A;
  15. Person.a.b.c = B;
  16. Person.a.b.c.d = f2;
  17. alert(Person.a.b.c.d); //正确,因为Person.a.b.c是有值的
  18. alert(Person.a.b.c.d.e.f); //错误,不能为Person.a.b.c.d.e增加属性f,因为Person.a.b.c.d.e是undefined

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

人气教程排行