javascript初接触(三)

接前面javascript初接触(二),继续简单了解javascipt。希望这部分之后,能和Qt中的QtScript、qml、QJS*** 一些东西完成对接。能读懂Qt Manual中和javascript有关的东西。

Constructor

JavaScript中没有类的概念,那么

a = new Array(10);
t = new Date();

中的 Array 和 Date 又是什么东西?这么像C++中的类。

恩,似乎真的不太好接受,这就是Constructor函数。和其他函数一样

function Person(name)
{
  this.name = name;
}

然后配合 new 操作符使用

p = new Person("Qter");

new 操作符后面必须跟着一个函数调用。它创建一个新的没有属性的object,然后调用这个函数。

被设计用来做这个工作的函数,称为 Contructor。其主要目的是初始化新创建的object。

Prototype

没有类,应该也就没有继承。不过它有个叫Prototype的东西

  • 接前面的例子:

代码

运行结果:

Person.constructor;

function Function() {
[native code]
}

Person.prototype.constructor;

function Person(name) {
this.name = name;
}

p.constructor;

同上

new 操作符将 Person 的prototype的属性也弄到了新创建的object中。

  • 继续

如果我想给Person加个成员函数怎么办?

function Person(name)
{
  this.name = name;
  this.output = function(){return "Hello " + this.name;}
}
p = new Person("Qt")
p.output()

这样以来,我们创建的每一个Person的对象都会生成一个函数属性。不是我们需要的,我们需要是,所有的对象共享同一个函数属性

于是,将其加到Person的prototype中

function Person(name)
{
  this.name = name;
}
Person.prototype.output = function(){return "Hello " + this.name;}
p = new Person("Qt")
p.output()

似乎还是挺神奇的哈。那么,这个属性?两种情况下还有什么区别呢?

语句

前者

后者(使用prototype)

p.hasOwnProperty("name")

true

true

p.hasOwnProperty("output")

true

false

"output" in p

true

true

  • 继续

如果,我试图写p的output属性会怎么样?

p2 = new Person("Python")
p2.output = "Qt"

恩,不会影响其他object。


你可能感兴趣的:(JavaScript,function,object,prototype,qt,Constructor)