掌握JavaScript中的方法、this及构造函数

需积分: 5 0 下载量 87 浏览量 更新于2024-12-18 收藏 4KB ZIP 举报
资源摘要信息:"JavaScript中的方法、this关键字和构造函数" JavaScript是一种高级的、解释型的编程语言,它是Web开发中最核心的技术之一。在JavaScript编程中,方法、`this`关键字和构造函数是三个非常重要的概念。理解这些概念对于编写高质量、可维护的JavaScript代码至关重要。 **方法(methods)** 在JavaScript中,方法是对象的一部分,它是一个属性,其值是一个函数。方法定义了对象执行的特定操作。对象可以拥有多个方法,方法可以接收参数,并可以返回值。通过对象调用方法可以实现封装、模块化以及代码重用。在面向对象编程中,对象的方法通常用于操作对象内部的数据。 **this关键字** `this`关键字是JavaScript中的一个特殊关键字,它指向函数执行时的上下文环境。在不同的上下文中,`this`可以指向不同的对象。正确地理解和使用`this`关键字对于控制函数的执行环境至关重要。 在全局作用域中,`this`指向全局对象,例如在浏览器中,`this`指向`window`对象。在函数作用域中,`this`的值取决于函数是如何被调用的。如果函数以对象的方法的形式被调用,`this`通常指向调用它的对象。如果函数是作为普通函数被调用的,那么`this`的值会是全局对象(在浏览器中是`window`),或者在严格模式('use strict')下,`this`的值将是`undefined`。 在构造函数中,`this`指向新创建的对象实例。在箭头函数中,`this`被词法地捕获,它继承自定义箭头函数的上下文。 **构造函数(constructors)** 构造函数是特殊的方法,用于创建和初始化对象。在JavaScript中,构造函数通常以大写字母开头,以区别于普通函数。使用`new`关键字调用构造函数可以创建一个新对象,并且构造函数的`this`会指向新创建的对象。 通过构造函数,开发者可以定义对象的属性和方法,从而创建具有特定功能和数据结构的对象实例。构造函数中的代码在每次创建新对象时都会执行,这使得每个实例都拥有相同的属性和方法,但各自的值可以不同。 **npm和jasmine** npm(Node Package Manager)是Node.js的包管理器,它用于安装和管理Node.js项目中使用的JavaScript包。通过npm可以方便地添加、更新和删除项目依赖。命令`npm install -g jasmine`用于全局安装jasmine测试框架。jasmine是一个行为驱动开发(BDD)测试框架,用于JavaScript代码。它允许开发者编写测试规范,以便能够验证代码的行为是否符合预期。 **代码示例** 在`book_reader.js`和`taxi.js`文件中,开发者需要编写代码来实现指定的功能,并确保所有测试能够一次性通过。第一个测试应该是为创建的类编写的一个测试规范。开发者可能需要在这些文件中定义类、构造函数、方法以及`this`的正确使用,来满足jasmine测试框架中的测试用例。 例如,如果测试要求`book_reader`对象需要有一个`read`方法,那么在`book_reader.js`文件中,开发者可能需要这样编写代码: ```javascript function BookReader(title) { this.title = title; } BookReader.prototype.read = function() { console.log('正在阅读: ' + this.title); }; module.exports = BookReader; ``` 然后在测试文件中,可以使用jasmine来测试`BookReader`类的`read`方法: ```javascript describe('BookReader', () => { it('应该能够读取书籍', () => { let bookReader = new BookReader('JavaScript高级程序设计'); expect(bookReader.read()).toEqual('正在阅读: JavaScript高级程序设计'); }); }); ``` 开发者需要确保在项目目录中运行jasmine测试命令,监视并运行测试。这通常通过命令行工具完成,如下: ```bash jasmine ``` 这将执行项目中所有指定的jasmine测试用例,并输出测试结果,包括哪些测试通过了,哪些失败了。 综上所述,通过理解JavaScript中的方法、`this`关键字和构造函数,结合使用npm和jasmine测试框架,可以有效地编写和测试JavaScript代码。这些概念和工具对于开发高质量的JavaScript应用程序至关重要。

分析封装。 private final String name; private double liquidity; private Set<MarketProperty> portfolio; //constructors //Creating an empty portfolio of assets and zero liquidity. public PropertyManagementCompany(String name, double liquidity) { this.name = checkName(name); this.liquidity = liquidity; this.portfolio = createEmptyPortfolio(); } private Set<MarketProperty> createEmptyPortfolio() { return new TreeSet<>(Comparator.comparingDouble(MarketProperty::getCurrentValuation).reversed()); } //creating a portfolio and liquidity with parameters such as company name, liquidity, and portfolio list public PropertyManagementCompany(String name, double liquidity, List<MarketProperty> portfolio) { this.name = checkName(name); this.liquidity = liquidity; this.portfolio = createEmptyPortfolio(); this.portfolio.addAll(portfolio); } //validators private String checkName(String name) { //The aim of this method is to ensure the type of category. if (name.isEmpty() ) { throw new IllegalArgumentException("The company name can't be empty!"); } else { return name; } } //Purchase a real estate asset with the purchase price. public void buyProperty(MarketProperty property, double price) { if (liquidity >= price) { if (portfolio.contains(property)) { throw new IllegalArgumentException("The property has been held."); } else { //MarketProperty marketProperty = new MarketProperty(property.getID(), property.getCategory(), property.getSize(), property.getInitialPrice()); portfolio.add(property); liquidity -= price; } } else { throw new IllegalArgumentException("Insufficient liquidity to purchase the property. "); } } //Sell a real estate asset with the current valuation. public void sellProperty(MarketProperty property) { if (portfolio.contains(property)) { liquidity += property.getCurrentValuation(); portfolio.remove(property); } else { throw new IllegalArgumentException("Property not found in portfoliio!"); } } //getters public String getName() { return name; } public double getLiquidity() { return liquidity; } public List<MarketProperty> g

2023-05-15 上传
120 浏览量

详细分析一下分析代码的封装 private final double initialPrice; private double currentValuation; private final Random random = new Random(); //constructors public MarketProperty(String id, String category, double size, double initialPrice) { super(id, category, size); this.initialPrice = initialPrice; this.currentValuation = this.initialPrice; } //methods /Through takes two parameters and updates thecurrent valuaton of the property based on a random value generated using the inflacyion rate and volatility ./ public void updateValuation(double inflationRate, double volatility) { double gaussian = Math.sqrt(volatility * volatility) * random.nextGaussian() + inflationRate; this.currentValuation = initialPrice * (1 + gaussian); } //getters public double getInitialPrice() { return initialPrice; } public double getCurrentValuation() { return this.currentValuation; } public double getTotalProfit() { return currentValuation - this.initialPrice; } public double getRelativeProfit() { return getTotalProfit() / this.initialPrice; } @Override public String toString() { return "ID : " + getID() + ", Initial Price = " + getInitialPrice() + ", Current Valuation= " + getCurrentValuation() + "."; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final MarketProperty other = (MarketProperty) obj; return Objects.equals(this.currentValuation, other.currentValuation); } @Override public int hashCode() { int hash = 7; hash = 67 * hash + (int) (Double.doubleToLongBits(this.initialPrice) ^ (Double.doubleToLongBits(this.initialPrice) >>> 32)); hash = 67 * hash + (int) (Double.doubleToLongBits(this.currentValuation) ^ (Double.doubleToLongBits(this.currentValuation) >>> 32)); return hash; } //MarketProperties are compared by theircurrent valuation public int compareTo(MarketProperty other) { return Double.compare(this.currentValuation, other.currentValuation);

131 浏览量