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。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值