类
aardio中类创建了一个新的名字空间,这一点和Python有很大的不同
先看看Python的
# -*- coding: utf-8 -*-
__author__ = 'duohappy'
class Test(object):
def __init__(self, para):
a = para
// self.a = para // 才可以
t = Test(10)
print(Test.a) # error
'''
a 仅仅就是__init__函数内部的一个变量,和实例、类均没有发生关系
'''
aardio的表现就不一样了
import console;
class clsTab {
ctor(para){
c = para; // 类的构造函数
}
print = function(){
..console.log(this.c); // this指代当前实例
// this.c为null,说明当前实例没有c这个属性
..console.log(self.c); // self指代当前名字空间,类有自己的名字空间,名称是类名
// self.c为30,说明构造函数,添加了一个名字空间的成员变量
}
}
tab = clsTab(30) // 创建了一个类的实例
tab.print() // 输出的结果,可以说明和Python的不同
console.pause(true);
aardio的构造函数赋值,应该采用this或者self关键词,这样代码更加有逻辑性
import console;
class clsTab {
ctor(para){
this.c = para; // this指代当前实例,这一点和Python中的__init__函数中总是用self.a = para,用self的道理一样
self.d = para - 10; // 构造了一个成员变量,类的实例不可以访问
// 这一点特别注意,名字空间的变量,实例不是一定可以访问
}
print = function(){
..console.log(this.c);
..console.log(self.d);
}
}
tab = clsTab(30)
console.print(tab.d) // 返回null,证明实例没有访问到名字空间的成员变量
tab.print()
console.pause(true);
但是aardio可以有类属性,这一点和Python有点像
import console;
class clsTab {
e = 1000; // 创建实例的时候,都有了这个变量
print = function(){
..console.log(this.e); // 实例可以访问这个变量
..console.log(self.e); // 名字空间没有这个变量
}
}
tab = clsTab()
tab.print()
console.log(tab.e)
console.log(clsTab.e) // 没有这个变量
console.pause(true);
建议在类和名字空间的使用中,尽量用this self 等指明容易混淆的地方