Open xcatliu opened 4 years ago
真是厉害的思想,讲解的很清晰呀!
private 讲错了吧 private 实例也无法使用呀 只能在原型里用 a.name是报错的 不是jack
我i记得我试过好像是好用的
------------------ 原始邮件 ------------------ 发件人: "liutao"<notifications@github.com>; 发送时间: 2020年8月14日(星期五) 下午5:18 收件人: "xcatliu/typescript-tutorial"; 抄送: "Comment"; 主题: Re: [xcatliu/typescript-tutorial] 类 (#167)
private 讲错了吧 private 实例也无法使用呀 只能在原型里用 a.name是报错的 不是jack
— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.
跟java中的类几乎是一模一样的设计呀
静态方法§ 使用 static 修饰符修饰的方法称为静态方法,它们不需要实例化,而是直接通过类来调用:
class Animal {
static isAnimal(a) {
return a instanceof Animal;
}
}
let a = new Animal('Jack');
Animal.isAnimal(a); // true
a.isAnimal(a); // TypeError: a.isAnimal is not a function
let a = new Animal('Jack'); 到这里就报错了
@guojingwen 静态方法§ 使用 static 修饰符修饰的方法称为静态方法,它们不需要实例化,而是直接通过类来调用:
class Animal { public name; public constructor(name) { this.name = name; } } let a = new Animal('Jack'); console.log(a.name); // Jack a.name = 'Tom'; console.log(a.name); // Tom
let a = new Animal('Jack'); 到这里就报错了
你用的是static吗兄弟
好久之前看的 不是说这个不需要实例化吗
------------------ 原始邮件 ------------------ 发件人: "不会敲代码"<notifications@github.com>; 发送时间: 2020年10月4日(星期天) 晚上6:21 收件人: "xcatliu/typescript-tutorial"<typescript-tutorial@noreply.github.com>; 抄送: "孤城"<1750961007@qq.com>; "Comment"<comment@noreply.github.com>; 主题: Re: [xcatliu/typescript-tutorial] 类 (#167)
@guojingwen 静态方法§ 使用 static 修饰符修饰的方法称为静态方法,它们不需要实例化,而是直接通过类来调用: class Animal { public name; public constructor(name) { this.name = name; } } let a = new Animal('Jack'); console.log(a.name); // Jack a.name = 'Tom'; console.log(a.name); // Tom
let a = new Animal('Jack'); 到这里就报错了
你用的是static吗兄弟
— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.
好久之前看的 不是说这个不需要实例化吗 你说的不能实例化的指的是抽象类abstract 啊, 你那段代码不会报错的,要报错也是因为没指定类型
@guojingwen 静态方法§ 使用 static 修饰符修饰的方法称为静态方法,它们不需要实例化,而是直接通过类来调用:
class Animal { public name; public constructor(name) { this.name = name; } } let a = new Animal('Jack'); console.log(a.name); // Jack a.name = 'Tom'; console.log(a.name); // Tom
let a = new Animal('Jack'); 到这里就报错了
你用的是static吗兄弟
是的,代码我粘贴错了,已更正, 你再看一下
好久之前看的 不是说这个不需要实例化吗 … ------------------ 原始邮件 ------------------ 发件人: "不会敲代码"<notifications@github.com>; 发送时间: 2020年10月4日(星期天) 晚上6:21 收件人: "xcatliu/typescript-tutorial"<typescript-tutorial@noreply.github.com>; 抄送: "孤城"<1750961007@qq.com>; "Comment"<comment@noreply.github.com>; 主题: Re: [xcatliu/typescript-tutorial] 类 (#167) @guojingwen 静态方法§ 使用 static 修饰符修饰的方法称为静态方法,它们不需要实例化,而是直接通过类来调用: class Animal { public name; public constructor(name) { this.name = name; } } let a = new Animal('Jack'); console.log(a.name); // Jack a.name = 'Tom'; console.log(a.name); // Tom let a = new Animal('Jack'); 到这里就报错了 你用的是static吗兄弟 — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.
我知道你表达的意思是对的,但是别人拿这个demo代码跑起来有其他问题
@guojingwen
@guojingwen 静态方法§ 使用 static 修饰符修饰的方法称为静态方法,它们不需要实例化,而是直接通过类来调用:
class Animal { public name; public constructor(name) { this.name = name; } } let a = new Animal('Jack'); console.log(a.name); // Jack a.name = 'Tom'; console.log(a.name); // Tom
let a = new Animal('Jack'); 到这里就报错了
你用的是static吗兄弟
是的,代码我粘贴错了,已更正, 你再看一下
没看到你代码有更改,话说这评论好难评...
静态方法§ 使用 static 修饰符修饰的方法称为静态方法,它们不需要实例化,而是直接通过类来调用:
class Animal { static isAnimal(a) { return a instanceof Animal; } } let a = new Animal('Jack'); Animal.isAnimal(a); // true a.isAnimal(a); // TypeError: a.isAnimal is not a function
let a = new Animal('Jack'); 到这里就报错了
@Mryang119 这里
@guojingwen 静态方法§ 使用 static 修饰符修饰的方法称为静态方法,它们不需要实例化,而是直接通过类来调用:
class Animal { static isAnimal(a) { return a instanceof Animal; } } let a = new Animal('Jack'); Animal.isAnimal(a); // true a.isAnimal(a); // TypeError: a.isAnimal is not a function
let a = new Animal('Jack'); 到这里就报错了
兄弟我看到了,我给你解释一下,你这段代码报错的原因跟静态属性这个没啥关系,你这里报错只是因为你传了一个意料外的字符串,你在类里并没有声明constructor初始函数,实例化的时候他没去用你的传入的值,所以就会报错你的代码只要改成这样就行
class Animal { name:string constructor(name:string){ this.name = name } static isAnimal(a) { return a instanceof Animal; } }
@guojingwen 静态方法§ 使用 static 修饰符修饰的方法称为静态方法,它们不需要实例化,而是直接通过类来调用:
class Animal { static isAnimal(a) { return a instanceof Animal; } } let a = new Animal('Jack'); Animal.isAnimal(a); // true a.isAnimal(a); // TypeError: a.isAnimal is not a function
let a = new Animal('Jack'); 到这里就报错了
兄弟我看到了,我给你解释一下,你这段代码报错的原因跟静态属性这个没啥关系,你这里报错只是因为你传了一个意料外的字符串,你在类里并没有声明constructor初始函数,实例化的时候他没去用你的传入的值,所以就会报错你的代码只要改成这样就行
class Animal { name:string constructor(name:string){ this.name = name } static isAnimal(a) { return a instanceof Animal; } }
这个意思我明白的,影响也不大,不提了
@guojingwen
@guojingwen 静态方法§ 使用 static 修饰符修饰的方法称为静态方法,它们不需要实例化,而是直接通过类来调用:
class Animal { static isAnimal(a) { return a instanceof Animal; } } let a = new Animal('Jack'); Animal.isAnimal(a); // true a.isAnimal(a); // TypeError: a.isAnimal is not a function
let a = new Animal('Jack'); 到这里就报错了
兄弟我看到了,我给你解释一下,你这段代码报错的原因跟静态属性这个没啥关系,你这里报错只是因为你传了一个意料外的字符串,你在类里并没有声明constructor初始函数,实例化的时候他没去用你的传入的值,所以就会报错你的代码只要改成这样就行
class Animal { name:string constructor(name:string){ this.name = name } static isAnimal(a) { return a instanceof Animal; } }
这个意思我明白的,影响也不大,不提了
emmmm好吧
在看这一章节的时候突然在想为什么会有static的方法,然后去搜索了哈,才明白静态方法是在创建类的时候就已经存在内存,直到程序结束才销毁,不用在每一个实例化中反复创建,节约内存空间,说的还是比较有道理
需要注意的是,即使是抽象方法,TypeScript 的编译结果中,仍然会存在这个类,上面的代码的编译结果是:
var extends = (this && this.extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function () { this.constructor = d; } d.prototype = b === null ? Object.create(b) : ((.prototype = b.prototype), new __()); }; var Animal = (function () { function Animal(name) { this.name = name; } return Animal; })(); var Cat = (function (_super) { __extends(Cat, _super); function Cat() { _super.apply(this, arguments); } Cat.prototype.sayHi = function () { console.log('Meow, My name is ' + this.name); }; return Cat; })(Animal); var cat = new Cat('Tom');
这段没看懂。。。是底层代码吗。我编译出来的js没这么复杂
@connie1992 跟java中的类几乎是一模一样的设计呀
php java c# python go 我都学了 都一样 :)
。。。
https://ts.xcatliu.com/advanced/class.html