方法定義在對象字面量中定義函數,白話一點就是在一個變量中直接在中定義一個方法。這種語法是在ES6中引入的,它提供了一種更簡潔的方法來定義對象。
let person = {
name: "Alice",
greet() {
console.log(`Hello, my name is ${this.name}`);
}
};
person.greet(); // 輸出:Hello, my name is Alice
![](http://)
在這個例子中,greet就是直接在person對象中定義的方法。
let calculator = {
add(a, b) {
return a + b;
},
subtract(a, b) {
return a - b;
},
multiply(a, b) {
return a * b;
},
divide(a, b) {
return a / b;
}
};
console.log(calculator.add(5, 3)); // 輸出:8
console.log(calculator.subtract(10, 4)); // 輸出:6
console.log(calculator.multiply(2, 6)); // 輸出:12
console.log(calculator.divide(15, 3)); // 輸出:5
let methodName = "sayHello";
let greeter = {
[methodName]() {
console.log("Hello!");
}
};
greeter.sayHello(); // 輸出:Hello!
這就使得我們可以動態地定義方法名。
綜上所述,方法定義帶來了這些優點:
不過這種方法定義方式與傳統的對象.方法 =function() {}方式在功能上是完全等價的,主要區別在於語法的簡潔性和代碼的組織方式。
構造函數是JavaScript中用於創建對象的一種特殊函數。它是實現面向對象編程的一種方式,允許我們創建具有相同結構和行為的多個對象實例。
1.基本用法
//基本語法
function ConstructorName(parameter1, parameter2, ...) {
this.property1 = parameter1;
this.property2 = parameter2;
// ...
this.method = function() {
// 方法定義
};
}
例子:
function Person(name, age) {
this.name = name;
this.age = age;
this.sayHello = function() {
console.log(Hello, my name is ${this.name} and I'm ${this.age} years old.);
};
}
let person1 = new Person("Alice", 30);
let person2 = new Person("Bob", 25);
person1.sayHello(); // 輸出:Hello, my name is Alice and I'm 30 years old.
person2.sayHello(); // 輸出:Hello, my name is Bob and I'm 25 years old.
**構造函數通常與'new'一起使用,其特點為:
例子:
function Car(make, model) {
this.make = make;
this.model = model;
}
// 添加到原型
Car.prototype.getInfo = function() {
return ${this.make} ${this.model};
};
let myCar = new Car("Toyota", "Corolla");
console.log(myCar.getInfo()); // 輸出:Toyota Corolla
function Counter() {
let count = 0; // 私有變量
this.increment = function() {
return ++count;
};
this.decrement = function() {
return --count;
};
}
let counter = new Counter();
console.log(counter.increment()); // 輸出:1
console.log(counter.increment()); // 輸出:2
console.log(counter.decrement()); // 輸出:1
console.log(counter.count); // 輸出:undefined(無法直接訪問count)
4.構造函數的返回值:
通常,構造函數不需要顯式的return語句。但如果有return語句的出現,則:
function SpecialObject(value) {
this.value = value;
return { custom: "Custom Object" };
}
let obj = new SpecialObject(100);
console.log(obj.custom); // 輸出:Custom Object
console.log(obj.value); // 輸出:undefined
5.檢查對象類型:
可以使用instance of運算符檢查對象是否是某個構造函數的實例:
javascriptCopyfunction Animal(name) {
this.name = name;
}
let cat = new Animal("Whiskers");
console.log(cat instanceof Animal); // 輸出:true
console.log(cat instanceof Object); // 輸出:true
6.構造函數的問題和解決方案:
每次創建新實例時,構造函數內部定義的方法都會被重新創建,這樣可能會導致內存浪費。解決方法是將方法定義在原型上:
javascriptCopyfunction Dog(name) {
this.name = name;
}
Dog.prototype.bark = function() {
console.log(${this.name} says Woof!);
};
let dog1 = new Dog("Rex");
let dog2 = new Dog("Buddy");
dog1.bark(); // 輸出:Rex says Woof!
dog2.bark(); // 輸出:Buddy says Woof!
console.log(dog1.bark === dog2.bark); // 輸出:true(共享同一個方法)
7.ES6 類語法:
ES6 引入了 class 語法,提供了一種更清晰的方式來創建構造函數和原型方法:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
console.log(Hello, my name is ${this.name} and I'm ${this.age} years old.);
}
}
let person = new Person("Alice", 30);
person.sayHello(); // 輸出:Hello, my name is Alice and I'm 30 years old.
開始上課了沒什麼時間,希望不會拖延太多,明天應該可以結束