接前面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() { |
| Person.prototype.constructor; | function Person(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中的构造函数(Constructor)与原型(Prototype)概念。通过具体示例展示了如何利用构造函数创建对象,并解释了如何通过原型来实现成员函数的共享,以提高内存效率。
3405

被折叠的 条评论
为什么被折叠?



