TypeScript 类

传统的js是使用函数和原型链的方式用来模拟类

es6中加入了类,class关键字

类

// 定义类
class Greeter {
	greeting: string;
	constructor(message: string){
		this.greeting = message;    // 使用this表示访问的是类成员 
	}
	greet() {
		return "Hello," + this.greeting;
	}
}

// 创建对象
let greeter = new Greeter("World");

编译后的js文件如下
es5

// 定义类
var Greeter = /** @class */ (function () {
    function Greeter(message) {
        this.greeting = message;
    }
    Greeter.prototype.greet = function () {
        return "Hello," + this.greeting;
    };
    return Greeter;
}());
// 创建对象
var greeter = new Greeter("World");
//# sourceMappingURL=out.js.map

es6

// 定义类
class Greeter {
    constructor(message) {
        this.greeting = message;
    }
    greet() {
        return "Hello," + this.greeting;
    }
}
// 创建对象
let greeter = new Greeter("World");
//# sourceMappingURL=out.js.map

继承

在ts中可以使用类似于Java中的类的继承。

// 定义类
class Animal {
	move(distanceInMeters: number = 0) {	// 定义一个方法
		console.log("class - Animal move 方法" + distanceInMeters);
	}
}

// 定义继承类
class Dog extends Animal {
	bark() {
		console.log("Dog!");
	}
}

const dog = new Dog();	// 创建给予Dog类的对象
dog.bark();	// 调用继承类的方法bark()
dog.move(10);	// 调用父类的move方法
dog.bark();
var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
        return extendStatics(d, b);
    }
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
// 定义类
var Animal = /** @class */ (function () {
    function Animal() {
    }
    Animal.prototype.move = function (distanceInMeters) {
        if (distanceInMeters === void 0) { distanceInMeters = 0; }
        console.log("class - Animal move 方法" + distanceInMeters);
    };
    return Animal;
}());
// 定义继承类
var Dog = /** @class */ (function (_super) {
    __extends(Dog, _super);
    function Dog() {
        return _super !== null && _super.apply(this, arguments) || this;
    }
    Dog.prototype.bark = function () {
        console.log("Dog!");
    };
    return Dog;
}(Animal));
var dog = new Dog(); // 创建给予Dog类的对象
dog.bark(); // 调用继承类的方法bark()
dog.move(10); // 调用父类的move方法
dog.bark();
//# sourceMappingURL=out.js.map

超类

class Animal {
	name: string;
	constructor(theName: string){
		this.name = theName;
	}
	move(distanceInMeters: number = 0){
		console.log("distanceInMeters " + distanceInMeters);
	}
}

class Snake extends Animal {
	constructor(name: string){
		super(name);	// 调用父类的构造方法,在构造函数访问this之前,必须调用一次 super()
	};
	move(distanceInMeters = 45){	// 重写父类的move方法
		console.log("Galloping...");
		super.move(distanceInMeters);	// 调用父类的move方法
	}
};

class Horse extends Animal {
	constructor(name: string){
		super(name);	// 调用父类的构造方法
	}
	move(distanceInMeters = 45){	// 重写move方法
		console.log("Galloping...");
		super.move(distanceInMeters);	// 调用父类的move
	}
}

// 调用基类的派生类即Snake类,使用的是基类的构造方法,重写了基类的move方法,并在子类的move方法中调用了父类的move方法
let sam = new Snake("Sammy the Python");
let tom: Animal;	// 声明tom对象,其为Animal类
tom = new Horse("Tommy the Palomino");	// 此处赋值为Horse类,重写了Animal中的move方法

sam.move();
tom.move();
var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
        return extendStatics(d, b);
    }
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var Animal = /** @class */ (function () {
    function Animal(theName) {
        this.name = theName;
    }
    Animal.prototype.move = function (distanceInMeters) {
        if (distanceInMeters === void 0) { distanceInMeters = 0; }
        console.log("distanceInMeters " + distanceInMeters);
    };
    return Animal;
}());
var Snake = /** @class */ (function (_super) {
    __extends(Snake, _super);
    function Snake(name) {
        return _super.call(this, name) || this;
    }
    ;
    Snake.prototype.move = function (distanceInMeters) {
        if (distanceInMeters === void 0) { distanceInMeters = 45; }
        console.log("Galloping...");
        _super.prototype.move.call(this, distanceInMeters); // 调用父类的move方法
    };
    return Snake;
}(Animal));
;
var Horse = /** @class */ (function (_super) {
    __extends(Horse, _super);
    function Horse(name) {
        return _super.call(this, name) || this;
    }
    Horse.prototype.move = function (distanceInMeters) {
        if (distanceInMeters === void 0) { distanceInMeters = 45; }
        console.log("Galloping...");
        _super.prototype.move.call(this, distanceInMeters); // 调用父类的move
    };
    return Horse;
}(Animal));
// 调用基类的派生类即Snake类,使用的是基类的构造方法,重写了基类的move方法,并在子类的move方法中调用了父类的move方法
var sam = new Snake("Sammy the Python");
var tom; // 声明tom对象,其为Animal类
tom = new Horse("Tommy the Palomino"); // 此处赋值为Horse类,重写了Animal中的move方法
sam.move();
tom.move();
//# sourceMappingURL=out.js.map

公有私有,保护修饰符

public 默认

public为默认

class Animal {
	public name: string;
	public constructor(theName: string){
		this.name = theName;
	}
	public move(distanceInMeters: number){
		console.log("move 方法");
	}
}

var Animal = /** @class */ (function () {
    function Animal(theName) {
        this.name = theName;
    }
    Animal.prototype.move = function (distanceInMeters) {
        console.log("move 方法");
    };
    return Animal;
}());
//# sourceMappingURL=out.js.map

private 保护成员

不能被外部访问

class Person {
	protected name: string;	// 保护成员,对外不可访问
	constructor(name:string){
		this.name = name;
	}
}

class Employee extends Person {
	private department: string;

	constructor(name:string, department:string){
		super(name);	// 调用父类的构造方法
		// 接着才能使用this
		this.department = department;
	}

	public getElevatorPitch(){
		return "hello !" + name;	// 通过实例访问父类的name
	}
}

let howard = new Employee("Howard", "sales");
console.log(howard.getElevatorPitch());
//console.log(howard.name);	//访问父类的,失败,不能直接被访问,但是能被派生方法所访问
PS C:\Users\mingm\Desktop\ts> tsc
Active code page: 65001
PS C:\Users\mingm\Desktop\ts>
var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
        return extendStatics(d, b);
    }
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var Person = /** @class */ (function () {
    function Person(name) {
        this.name = name;
    }
    return Person;
}());
var Employee = /** @class */ (function (_super) {
    __extends(Employee, _super);
    function Employee(name, department) {
        var _this = _super.call(this, name) || this;
        // 接着才能使用this
        _this.department = department;
        return _this;
    }
    Employee.prototype.getElevatorPitch = function () {
        return "hello !" + name; // 通过实例访问父类的name
    };
    return Employee;
}(Person));
var howard = new Employee("Howard", "sales");
console.log(howard.getElevatorPitch());
//console.log(howard.name);	//访问父类的,失败,不能直接被访问,但是能被派生方法所访问
//# sourceMappingURL=out.js.map
// 构造函数使用保护
class Person {
	protected name: string;
	protected constructor(theName:string){	// 构造方法,进行保护
		this.name = theName;
	}
}

class Employee extends Person {
	private department: string;

	constructor(name: string, department:string){
		super(name);
		this.department = department;
	}

	public getElevatorPitch() {
		return "hello" + this.department + this.name;
	}
}

let howard = new Employee("Howard", "Sales");

//let john = new Peron("John");	//错误,构造函数被保护,不能在外部访问
var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
        return extendStatics(d, b);
    }
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
// 构造函数使用保护
var Person = /** @class */ (function () {
    function Person(theName) {
        this.name = theName;
    }
    return Person;
}());
var Employee = /** @class */ (function (_super) {
    __extends(Employee, _super);
    function Employee(name, department) {
        var _this = _super.call(this, name) || this;
        _this.department = department;
        return _this;
    }
    Employee.prototype.getElevatorPitch = function () {
        return "hello" + this.department + this.name;
    };
    return Employee;
}(Person));
var howard = new Employee("Howard", "Sales");
//let john = new Peron("John");	//错误,构造函数被保护,不能在外部访问
//# sourceMappingURL=out.js.map

readonly修饰符

将属性设置为只读

class Octopus {
	readonly name: string;	// 只读
	readonly numberOfLegs: number = 8; // 只读

	constructor(theName:string){
		this.name = theName;
	}
}
let dad = new Octopus("Hello world");

//dad.name = "Hello world";	//设置值。出错,由于为只读
var Octopus = /** @class */ (function () {
    function Octopus(theName) {
        this.numberOfLegs = 8; // 只读
        this.name = theName;
    }
    return Octopus;
}());
var dad = new Octopus("Hello world");
//dad.name = "Hello world";	//设置值。出错,由于为只读
//# sourceMappingURL=out.js.map

参数属性

class Octopus {
	readonly numberOfLegs: number = 9;
	constructor(readonly name:string){	// 直接定义参数属性

	}
}
var Octopus = /** @class */ (function () {
    function Octopus(name) {
        this.name = name;
        this.numberOfLegs = 9;
    }
    return Octopus;
}());
//# sourceMappingURL=out.js.map

通过get set获取属性

let passcode = "secret passcode";

class Employee {
	private _fullName: string;	// 保护成员一般下划线

	get fullName():string {	// get方法
		return this._fullName;
	}

	set fullName(newName:string){
		if (passcode && passcode == "code") {
			// 进行赋值操作
			this._fullName = newName;
		}else {
			console.log("出现重复")
		}
	}
}

let employee = new Employee();	// 创建对象
employee.fullName = "Bob";	//调用get方法
// 下面调用set方法
if(employee.fullName){
	console.log(employee.fullName);
}

PS C:\Users\mingm\Desktop\ts> tsc
Active code page: 65001
PS C:\Users\mingm\Desktop\ts>
var passcode = "secret passcode";
var Employee = /** @class */ (function () {
    function Employee() {
    }
    Object.defineProperty(Employee.prototype, "fullName", {
        get: function () {
            return this._fullName;
        },
        set: function (newName) {
            if (passcode && passcode == "code") {
                // 进行赋值操作
                this._fullName = newName;
            }
            else {
                console.log("出现重复");
            }
        },
        enumerable: true,
        configurable: true
    });
    return Employee;
}());
var employee = new Employee(); // 创建对象
employee.fullName = "Bob"; //调用get方法
// 下面调用set方法
if (employee.fullName) {
    console.log(employee.fullName);
}
//# sourceMappingURL=out.js.map

只能输出es5或更高的版本,不支持输出es3

静态属性

当类未被实例化的时候,可以直接访问的为静态属性

class Grid {
	static origin = { x: 0, y: 0 };	// 这里类似使用static 
	calculate(point:{x:number, y:number}){	// 在此处定义了point,
		let x = point.x - Grid.origin.x	// 前面访问的是poinyt定义的,后面访问的是static定义的origin
		let y = point.y - Grid.origin.y;	// 同理如上
		return point.x + point.y;	
	}
	constructor(public scale: number) { };
}

let grid1 = new Grid(1.0);// 对static进行赋值
let grid2 = new Grid(2.0);

// 访问
grid1.calculate({x:10, y:10});	
grid2.calculate({x:10, y:10});

var Grid = /** @class */ (function () {
    function Grid(scale) {
        this.scale = scale;
    }
    Grid.prototype.calculate = function (point) {
        var x = point.x - Grid.origin.x; // 前面访问的是poinyt定义的,后面访问的是static定义的origin
        var y = point.y - Grid.origin.y; // 同理如上
        return point.x + point.y;
    };
    ;
    Grid.origin = { x: 0, y: 0 }; // 这里类似使用static 
    return Grid;
}());
var grid1 = new Grid(1.0); // 对static进行赋值
var grid2 = new Grid(2.0);
// 访问
grid1.calculate({ x: 10, y: 10 });
grid2.calculate({ x: 10, y: 10 });
//# sourceMappingURL=out.js.map

抽象类

抽象类为其他派生类的基类。

抽象类不会被实例化

抽象类用于作为基类,派生出其他类使用。

// 定义抽象类
abstract class Department {
	constructor(public name:string){

	}

	// 定义实现的细节
	printName():void{
		console.log("实现细节");
	}

	// 定义抽象方法,该抽象方法必须在派生类中实现其具体的内容
	abstract printMeeting(): void;
}

class AccountingDepartemnt extends Department {
	constructor(){
		super("hello world");	// 调用基类的构造方法
	}

	// 对抽象方法进行完善
	printMeeting():void{
		console.log("完善!");
	}

	// 定义其余的方法
	generateReports():void{
		console.log("添加的其他方法")
	}
}

// 创建一个抽象类型的引用
let department: Department;	// 抽象类的引用,类似于定义,可以被抽象类的子类进行实例化,即分配内存空间,不能被抽象类进行实例化,因为抽象类不能分配内存空间,所以不能对抽象类进行new操作
department = new AccountingDepartemnt();	// 可以进行分配内存空间
department.printMeeting();	
var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
        return extendStatics(d, b);
    }
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
// 定义抽象类
var Department = /** @class */ (function () {
    function Department(name) {
        this.name = name;
    }
    // 定义实现的细节
    Department.prototype.printName = function () {
        console.log("实现细节");
    };
    return Department;
}());
var AccountingDepartemnt = /** @class */ (function (_super) {
    __extends(AccountingDepartemnt, _super);
    function AccountingDepartemnt() {
        return _super.call(this, "hello world") || this;
    }
    // 对抽象方法进行完善
    AccountingDepartemnt.prototype.printMeeting = function () {
        console.log("完善!");
    };
    // 定义其余的方法
    AccountingDepartemnt.prototype.generateReports = function () {
        console.log("添加的其他方法");
    };
    return AccountingDepartemnt;
}(Department));
// 创建一个抽象类型的引用
var department; // 抽象类的引用,类似于定义,可以被抽象类的子类进行实例化,即分配内存空间,不能被抽象类进行实例化,因为抽象类不能分配内存空间,所以不能对抽象类进行new操作
department = new AccountingDepartemnt(); // 可以进行分配内存空间
department.printMeeting();
//# sourceMappingURL=out.js.map

构造函数

可以使用类似于java中的语法,进行声明构造函数

class Greeter{
	greeting: string;
	constructor(message:string){
		this.greeting = message;
	}
	// 类似于java中声明构造方法
	greet(){
		return "hello " + this.greeting;
	}
}

// 首先进行创建引用,类似于原生的var,仅仅声明,并未创建引用。但是必须进行声明,声明其为Greeter
let greeter: Greeter;
// 进行分配空间
greeter = new Greeter("world");
console.log(greeter.greet());

和使用抽象接口一样,当使用抽象接口的时候,必须要进行先创建引用,然后在分配空间
原生的如下

var i;  // 在栈上开辟一块空间,进行储存
i = new Greeter();  // 完成由栈到堆的指向,对象储存在堆中,当然啦,C++允许对象储存在栈中

必须进行两步。

关于C++堆和栈的类

静态建立

使用

Box Box

如上的方式,将会静态的建立一个对象
静态建立对象,将会由编译器在栈中分配内存空间。通过移动栈顶指针,挪出适当的位置,在内存空间上调用构造函数,形成一个栈对象,此方法为在栈中储存对象。

动态建立

使用

Box* Box = new Box();

如上的方式,将会动态的建立一个对象。
使用new操作运算符的时候,将会在堆中分配一块内存空间,完成由栈到对的指向。

类当做接口使用

接口,一种传入对象的规范,比喻,水管的水龙头。

类可以创建出任何类型

class Point{
	x: number;
	y: number;
}

interface Point3d extends Point{
	z: number;
}

let point3d:Point3d = {
	x:1,
	y:2,
	z:4
}

使用extends,进行创建接口

var Point = /** @class */ (function () {
    function Point() {
    }
    return Point;
}());
var point3d = {
    x: 1,
    y: 2,
    z: 4
};
//# sourceMappingURL=out.js.map

相关推荐

第三章:黑石谜影,能源帝国的起点

夜幕降临,山林间的寒意愈发浓重。微风吹拂,树梢摇曳,发出沙沙作响的声音,宛如无形的低语,回荡在群山之间。夜空幽深,星光被茂密的枝叶遮挡,森林里笼罩着一层神秘的阴影。李武踩着厚厚的落叶,紧握手中的长弓,屏息凝神地观察着前方的灌木丛。他的猎犬伏在地上,竖起耳朵,喉间发出低沉的呜咽声。猎犬的异常反应让他不由得心头一紧,手指悄然搭上弓弦,眼神锐利地扫视四周。“奇怪……”他皱起眉头,按理说这个时节正是野兽活...

mySoul 879

第二章 初次交锋

“站住!”一声断喝划破沉寂的山林,回音在苍茫雪地间飘荡,如同一把利刃撕裂夜幕。张远的脚步猛然一顿,目光如炬,迅速扫视四周,试图判断威胁的来源。他的呼吸在寒冷的空气中化作一缕缕白雾,缓缓散去。前方,一个身材魁梧的男子稳稳站立,手持长刀,刀锋在幽暗的天光下闪烁着寒芒,宛如一道致命的雷霆,映照着男子犀利而充满警惕的眼神。寒风裹挟着冰冷的雪粒,如刀刃般刮过张远的脸颊,刺骨的寒意渗透进皮肤,带来微微的钝痛。...

mySoul 468

<span class=“js_title_inner“>第二章 初次交锋</span>

前方,一个身材魁梧的男子稳稳站立,手持长刀,刀锋在幽暗的天光下闪烁着寒芒,宛如一道致命的雷霆,映照着男子犀利而充满警惕的眼神。村长听完张远的来意,缓缓叹了口气,眼中闪过一抹痛苦:“今年的冬天格外冷,前些年还能靠狩猎、采集度日,可如今,山里几乎没有猎物,地里的庄稼也早已枯死,粮食眼看着就要吃完……”他说着,随手捡起一块散落在地的泥块,摩挲着粗糙的表面,继续道,“同时,我可以教大家制作一些简易的捕猎工具,提高成功率。张远环顾四周,目光在昏暗的屋内扫过,看到墙角处抱团取暖的村民,瑟瑟发抖的孩童,疲惫蜷缩的老人。

mySoul 567

明末穿越:开局我是资本家 第一章 穿越冰雪的交易者

第一章 穿越冰雪的交易者隆冬时节,狂风怒吼,漫天飞雪遮蔽了高山的轮廓。整个山谷仿佛被银白色的冰雪吞噬,天地间弥漫着彻骨的寒意,仿佛连空气都被冻结成了刀锋,割裂着每一寸裸露的肌肤。张远裹紧冲锋衣,低着头艰难前行。他的呼吸变得急促,每一次吐气都在空气中凝结成白雾,随风飘散。他的手指已经冻得发僵,即便戴着厚实的手套,也无法彻底抵御这刺骨的寒冷。每走一步,都能听见脚下积雪被踩碎的“咔嚓”声。每迈出一步,他...

mySoul 637

<span class=“js_title_inner“>明末穿越:开局我是资本家 第一章 穿越冰雪的交易者</span>

面对这个动荡的时代,他是一个毫无根基的外来者,身无分文,身份成谜,连自身的安危都未可知。他努力回忆着自己穿越前的一切,那块神秘的金属板,那一瞬间的吸力,仿佛时间和空间被撕裂,他整个人被无形的力量吞噬。他身后的几个村民也悄悄地打量着张远的装备,那厚实的冲锋衣、坚固的登山靴、背后的背包,所有的一切都与他们的认知格格不入。他深吸了一口冰冷的空气,感受到肺部的微微刺痛,才终于确定这不是梦境,而是残酷的现实。他现在的处境十分微妙,这些村民对他充满怀疑,他需要尽快找到一个合理的身份,避免引起更大的注意。

mySoul 424

<span class=“js_title_inner“>明末穿越:开局我是资本家 第一章 穿越冰雪的交易者</span>

面对这个动荡的时代,他是一个毫无根基的外来者,身无分文,身份成谜,连自身的安危都未可知。他努力回忆着自己穿越前的一切,那块神秘的金属板,那一瞬间的吸力,仿佛时间和空间被撕裂,他整个人被无形的力量吞噬。他身后的几个村民也悄悄地打量着张远的装备,那厚实的冲锋衣、坚固的登山靴、背后的背包,所有的一切都与他们的认知格格不入。他深吸了一口冰冷的空气,感受到肺部的微微刺痛,才终于确定这不是梦境,而是残酷的现实。他现在的处境十分微妙,这些村民对他充满怀疑,他需要尽快找到一个合理的身份,避免引起更大的注意。

mySoul 828

短篇小说精选:第五章:命运的选择

李珂的目光紧紧锁定在那本浮现于空中的书卷上,心跳在激烈跳动,仿佛整颗心都被某种未知的力量牵引着。他知道,眼前这本书,不仅仅是命运的注脚,更是一把打开未来之门的钥匙。每一个字,每一个符号,都承载着无尽的秘密与可能。而“真理之核”这四个字,更像是一颗璀璨的星辰,吸引着他的目光,无法逃脱。他微微低头,握紧了手中的剑柄,那柄剑自从他踏入这片神秘的天地之后,就一直在他手中,沉默不语,却又充满了某种无法言喻的...

mySoul 663

<span class=“js_title_inner“>短篇小说精选:第五章:命运的选择</span>

那是超越语言的存在,李珂明白,书卷中的内容并非简单的文字,而是一种象征,一种引导着他走向未知的路径。他微微低头,握紧了手中的剑柄,那柄剑自从他踏入这片神秘的天地之后,就一直在他手中,沉默不语,却又充满了某种无法言喻的重量。李珂认出那是“真理之核”的标志,一颗悬浮的星辰,周围环绕着无数复杂的几何形状,像是宇宙的核心,蕴含着无尽的智慧和力量。在它的中心,有一道黑色的裂痕,仿佛深邃的漩涡,吞噬着周围的一切光芒。”低沉的声音再次响起,这一次,它不再试图阻止,而是带着一种莫名的宽慰,“真理,终究属于敢于面对的人。

mySoul 792

短篇小说精选:第4章 真理之核

李珂的目光紧紧锁定在那本浮现于空中的书卷上,心跳在激烈跳动,仿佛整颗心都被某种未知的力量牵引着。他知道,眼前这本书,不仅仅是命运的注脚,更是一把打开未来之门的钥匙。每一个字,每一个符号,都承载着无尽的秘密与可能。而“真理之核”这四个字,更像是一颗璀璨的星辰,吸引着他的目光,无法逃脱。他微微低头,握紧了手中的剑柄,那柄剑自从他踏入这片神秘的天地之后,就一直伴随着他。剑身散发出淡淡的蓝色光芒,与书卷的...

mySoul 643

第3章 命运的抉择

宁静的星空下,李珂缓缓迈步。他的目光凝视远方,那巨大的时光之轮静静旋转,光辉洒满整片天地。这里的宁静仿佛一场梦,然而,他的内心却深知:这仅仅是个开始。真相之书大殿的蓝色光芒消失后,一本悬浮的古朴书卷突然出现在李珂眼前。书卷的封面上,铭刻着一个复杂的齿轮符号,仿佛在诉说着时间的秘密。“命运的轨迹从未被真正书写,但真相就在这里。”熟悉的女子声音再次响起,清冷中带着不可抗拒的威严。李珂抬起手,触碰书卷。...

mySoul 607

<span class=“js_title_inner“>第3章 命运的抉择</span>

他的意识开始模糊,耳边传来无数断断续续的低语——那些似乎是从未来和过去的片段中传来的声音。”女子的声音渐渐变得低沉,“它的存在是个悖论,只有背负命运钥匙的人,才能踏上寻找它的旅途。李珂抬起手,触碰书卷。然而,他的脚步刚踏入塔的影子,一道黑影突然从塔内冲出,挡在他的面前。书卷的封面上,铭刻着一个复杂的齿轮符号,仿佛在诉说着时间的秘密。女子伸手指向远方,一个模糊的光点在荒漠的尽头微微闪烁:“穿过荒芜之境,找到那座失落的神庙。”女子的身影再度出现,“如果时光之轮失衡,这里便是未来的模样——一片没有尽头的荒漠。

mySoul 298

第2章 命运的钥匙

时间的齿轮在缓缓转动。李珂站在星空下,手中的光之钥散发出柔和的光芒,像是某种无声的召唤。他目光坚定,沿着光芒指引的方向一步步迈向那悬浮在虚空深处的巨大齿轮。耳边,那个熟悉的声音再次响起,冰冷中带着一丝不容置疑的威严:“你的选择将重塑一切,记住,前方没有退路。”李珂抿紧了嘴唇,他不喜欢被命运牵着走的感觉,但他知道,现在没有时间犹豫。他咽下所有的疑问与不安,继续前行。光门的秘密不知走了多久,一道浮动的...

mySoul 724

<span class=“js_title_inner“>第2章 命运的钥匙</span>

女子缓缓走近,目光直视李珂,像是在剖析他的灵魂,“你每一个选择,都将引发连锁反应。当他的指尖碰触到晶体的一瞬间,一股强烈的能量涌入他的身体,无数画面如潮水般涌入脑海。”熟悉的声音在他背后响起。李珂转身,戴头盔的女子正站在不远处,语气一如既往地平静,“时间核心记录着所有可能的未来,也决定着过去的稳定。”女子的声音从他身后传来,冷静而笃定,“你每一个选择,都像齿轮上的刻痕,最终决定时光之轮的运转轨迹。耳边,那个熟悉的声音再次响起,冰冷中带着一丝不容置疑的威严:“你的选择将重塑一切,记住,前方没有退路。

mySoul 898

短篇小说系列:时光之轮·第二章:裂缝中的真相

当李珂再次睁开眼时,他发现自己身处一片空旷的大厅。四周的墙壁光滑如镜,映照出他困惑的脸庞。大厅的正中央悬浮着一个巨大的齿轮,缓缓转动着,每一次转动都发出低沉的轰鸣,仿佛时间本身的心跳。“欢迎来到时光议会的核心,‘裂缝’。”那个熟悉的声音再次响起,是那位戴着头盔的女子。李珂转头望去,女子正静静站在他的身后。没有了外面的喧嚣,这里的安静几乎让人窒息。“你把我带到这里来,到底想让我做什么?”李珂强压下心...

mySoul 455

短篇系列小说:时光之轮

每个梦境都有一个源头,每段记忆都有一个裂缝。李珂站在古老的钟楼下,环视着这个他从未见过的城市——一座充满蒸汽与机械的未来都市。远处,熙熙攘攘的街道上,机械马车与人类并肩行走;空中飞翔的气垫船不时呼啸而过,划破了悠长的天际。每一个细节都让他心中泛起莫名的震动,但却又感觉如此熟悉。“李珂。”一个声音轻轻唤住了他的思绪。他转身,只见眼前的女子身着古老的制服,金发如瀑,脸庞却隐藏在一顶镶着细碎宝石的头盔后...

mySoul 407

短篇小说精选:星际孤岛

人类在宇宙中的扩展速度远超所有预想,星际航行已经不再是科幻中的遥不可及,而是日常的常态。可随着不断拓展的星际殖民地,人类却逐渐迷失在无尽的星空中,甚至有人开始怀疑,这片浩瀚的宇宙是否真的属于他们。艾拉·诺兰是一名航天员,负责探索一个名为“泽塔-1”的远古星球。这颗星球位于银河系的边缘,距离地球已有上百光年的距离,曾是一个失落的文明遗址。没人知道泽塔-1究竟发生了什么,那里的遗迹被覆满了厚重的尘土和...

mySoul 467

<span class=“js_title_inner“>短篇小说精选:星际孤岛</span>

她用飞船上的探测器扫描了一遍,发现塔内的结构复杂得超出了她的理解范畴,而最令人不安的是,塔内的能量似乎有意识地与她的探测器进行互动。她曾梦想着与人类一同探索星际的奥秘,成为历史的一部分,可如今,她却只能在无尽的黑暗与寂静中孤独地守护着一颗死去的星球。她的身体被一股无形的力量禁锢在了塔的核心,她的意识与这颗星球的能量完全融合,成为了星球与外界沟通的唯一桥梁。突然,所有的光芒聚焦到她的身上,脑海中响起了一声低沉的声音:“你,终于来了。然而,随着时间的流逝,她逐渐意识到,这并非是她的选择。

mySoul 292

短篇小说:深夜食堂的最后一碗面

冬日的午夜,城市霓虹微弱,街头的寒风裹挟着寂静。巷子深处,一家老旧的小面馆仍然亮着昏黄的灯光。门口的风铃轻轻摇晃,仿佛在为夜归人指引归宿。面馆的老板老周是一位沉默寡言的中年男人,留着花白的胡渣。他总是在午夜开店,面对三三两两的客人,默默端上一碗热气腾腾的面。他从不多问,但总能从客人的眼神中看出他们需要一份什么样的安慰。这天夜里,一个穿着黑色风衣的女人推开了门。她低着头,似乎有千斤重的心事。老周扫了...

mySoul 306

Web 3.0 是什么

对于Web2.0来说,最重要的是Web服务中的双向消息协议,该协议是Web2.0架构的关键元素之一。两个主要类型是REST API和SOAP构建软件的方法。REST是一种Web服务的服务器端向客户端传送消息的一种方法,主要有GET、POST、DELETE、PUT四种传递消息的方式,分别对于获取、提交、删除、更新四种Web2.0的状态。SOAP是一种依赖于服务器来保存状态信息的一种方式,其主要传递方式为XML的方式传递。(SOAP现在已经不在使用,传递方式比较多的JSON信息传递)

mySoul 2102

时光穿越:本草纲目新传

第一章:异世降临一场意外,让现代人林峰穿越到了明朝时期。凭借丰富的现代农业和科技知识,他决定帮助这个时代的百姓改善生活。林峰深入田间地头,传授农民们先进的农业技术,引导他们种植高产的粮食作物。在他的指导下,粮食产量大增,百姓们的生活逐渐殷实起来。有了稳定的粮食来源,林峰开始思考如何进一步推动这个时代的发展。一日,林峰在书店中闲逛,无意中发现了一本《本草纲目》。他想起现代人对这部巨著的赞誉,决定找到...

mySoul 602

小说:第一章 穿越时空,一桶金梦开始

第一章 穿越时空,一桶金梦开始在电闪雷鸣的夜晚,一道刺眼的白光突然从天而降,准确地击中了正在家中的林峰。他瞪大眼睛,只觉得全身被一股强大的力量裹挟,接着便失去了意识。当林峰再次睁开眼睛的时候,他发现自己身处一个陌生的地方,四周古色古香的建筑、宽大的长袍、古代发髻的人们……这一切都让他瞠目结舌。经过一番询问和观察,林峰确定了一个惊人的事实——他竟然穿越了时空,来到了古代!尽管内心充满了震惊和不适应,...

mySoul 672

轻松读懂公司估值

公司估值是推倒公司的公允价值,企业的真实价值不是客观确定的,而是不同评估方法的折中,这些不同的评估方法都指向了公司的具体公允价值范畴。例如,售完的演唱会门票,对于其粉丝的价值,要远远高于对该演唱会不感兴趣的粉丝的价值。一克的黄金,不会产生任何收益,但是会对投资者产生保护感,这就是价值。许多的资产的价值,往往不取决于其面值或者预期现金流,而在于其有形的,有时非理性的,或者感性的特性。与之相对的,是无...

mySoul 306

应收账款天数和应付账款天数和现金比率和速动比率

应收账款和应付账款天数应收账款天数计算公式为:应收账款天数 = 平均应收账款 * 360 除以 销售额应收账款天数(DOS)显示公司需要多少天才能从客户那里收回账款,所以应收账款天数增加的时候,表明应收账款管理出现恶化,表明公司收不到货款。数值增加会减少公司经营性现金流。应付账款天数 = 平均应付账款 * 360 / 销售成本应付账款天数量化公司需要多长时间才会支付供应商货款,数据目标关系:应收账...

mySoul 1771

中航首钢绿能Reits2022年中期报告分析

资产负债表利润表安全性分析安全性分析主要分析项目的安全性采用公式为现金及现金等价物/有息负债计算过程如下:有息负债为0所以该项目足够安全盈利能力分析主要从营业收入角度和资产角度进行分析营业收入角度:即每营业收入多少转化为了净利润计算过程如下所示:(212,117,229.63营业收入 - 178,702,660.90营业总成本 )/ 212,117,229.63营业收入 = 15...

mySoul 589

财报是用来排除企业的

一个故事,某家企业该年度出现了亏损,如何扭亏为盈呢,很简单,首先和银行签订协议,将公司的大楼作价归还给银行,算是欠款还完钱了。第二步,再签一份合同,公司和银行买楼,算是正好扭亏为盈了。为什么会这样呢,是因为原本房产价值3000万元,作价1.6亿元,还贷款1.6亿元,获得了1.3亿元营业收入,这样就产生了利润。此时,再用1.6亿元买回那套房子,这1.6亿元是借款,原本就欠款...

mySoul 333

什么是债券

什么是债券债券(Notes)是政府金融机构工商企业等机构直接向社会借债筹措资金时向投资者发行承诺按一定利率支付利息并按约定条件偿还本金的债权债务凭证债券的本质是债的证明书具有法律效力债券购买者与发行者之间是一种债权债务关系债券发行人即债务人(Debtors)投资者(或债券持有人)即债权人(Creditors)最常见的债券为定息债券浮息债券以及零息债券与银行信贷不同的是债券是一种直接债务关系...

mySoul 382

这本关于Node.js的书,是一本神书,助你学会Node.js,为你升职加薪,走上人生巅峰

1什么是Node.js?有人说Node.js是前端,有人说Node.js是后端,也有人说我不会Node.js。在从Google的V8引擎发布以来,Node.js自出现以来,靠着单线程,高并发的应用场景,快速的安装在前端和后端的服务器中。了解Node.js一方面,可以拥有一个单线程,高并发应用场景的解决方案,另外一方面还可以学会基本的WEB开发。为你升职加薪,走上人生巅峰!2在这里呢,推荐一本神书,作者是优快云旗下的Gichat专栏作者。先节选一些内容,推荐语:本书...

mySoul 1375

微软官宣 Win 11 即将到来,网友:没安卓,升个寂寞啊!

文 | 御坂弟弟出品 | OSC开源社区(ID:oschina2013)之前,Windows 11 正式发布!能跑安卓应用程序,意味着Windows 11将支持Android应用程序,人们在手机上使用的数百万款流行应用程序,将可以直接出现在PC桌面上。让开发者沸腾了一段时间!微软表示,Windows 11将在今年年末正式上市,Windows 10的现有用户可以免费升级,预装有Windows 11的...

mySoul 184

用户必须有权关闭推荐和广告,网信办:算法推荐管理规定开始征求意见

机器之心报道机器之心编辑部亲戚朋友一刷短视频就不带停?这种现象已经非常普遍了,但推荐系统除了让信息传播速度加快之外也不全是好事。8 月 27 日,国家互联网信息办公室起草的《互联网信息服务算法推荐管理规定(征求意见稿)》出炉,正向社会公开征求意见。本次《征求意见稿》所涉的范围非常广泛。《征求意见稿》中明确指出,所谓的算法推荐技术,是指应用生成合成类、个性化推送类、排序精选类、检索过滤类、调度决策类...

mySoul 403

JS必知的6种继承方式

作者:朱玉星介绍:活跃于国内各技术社区,多年来致力于React技术,具有丰富的实战项目经验,喜欢的他的可关注他的公众号【前端小弟】前言JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一。那么如何在JS中实现继承呢?让我们拭目以待。JS继承的实现方式既然要实现继承,那么首先我们得有一个父类,代码如下://父类functionPerson(name){//给构造函数添加了参数...

mySoul 259
上一篇: TypeScript 接口
下一篇: 测试用例概念 原则
小小∽
小小∽ 企业官方账号 企业官方账号
博客等级 码龄9年 306粉丝 361原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值