js笔记(面向对象)


二,oop
每一个函数都包含了一个prototype属性,这个属性指向了一个prototype对象
Every function has a prototype property that refers to a predefined prototype object
看过一篇文章介绍说javascript中对象的prototype属性相当于java中的static变量,可以被这个类下的所有对象
共用.而上面的例子似乎表明实际情况并不是这样:
在JS中,当我们用new操作符创建了一个类的实例对象后,它的方法和属性确实继承了类的prototype属性,类的prototype属性
中定义的方法和属性,确实可以被这些实例对象直接引用.但是,当我们对这些实例对象的属性和方法重新赋值或定义后,那么
实例对象的属性或方法就不再指向类的prototype属性中定义的属性和方法,此时,即使再对类的prototype属性中相应的方法或
属性做修改,也不会反应在实例对象身上。
三,oop2
function myfunc ()
  {
   alert("hello");
  };
  myfunc(); //这里调用myfunc,输出yeah 而不是hello
  function myfunc ()
  {
   alert("yeah");
  };
  myfunc(); //这里调用myfunc,当然输出yeah
  /*
  按理说,两个签名完全相同的函数,在其他编程语言中应该是非法的。但在JavaScript
  中,这没错。不过,程序运行之后却发现一个奇怪的现象:两次调用都只是最后那个函数里
  输出的值!显然第一个函数没有起到任何作用。这又是为什么呢?
  JavaScript 执行引擎并非一行一行地分析和执行程序,而是一段一段地分析执行的。
  而且,在同一段程序的分析执行中,定义式的函数语句会被提取出来优先执行。函数定义执
  行完之后,才会按顺序执行其他语句代码。也就是说,在第一次调用myfunc 之前,第一个
  函数语句定义的代码逻辑,已被第二个函数定义语句覆盖了。所以,两次都调用都是执行最
  后一个函数逻辑了。
四,
JavaScript 里的函数和对象既有对象的特征也有数组的特征

你可能感兴趣的:(JavaScript,编程,prototype,oop)