利用动态原型法创建对象,并进行测试
时间: 2023-06-24 09:05:34 浏览: 76
动态原型法是一种创建对象的方式,它允许我们在运行时动态地添加属性和方法,从而创建一个完整的对象。下面是一个利用动态原型法创建对象的例子:
```javascript
function Person(name, age) {
this.name = name;
this.age = age;
if (typeof this.sayHello !== 'function') {
Person.prototype.sayHello = function() {
console.log('Hello, my name is ' + this.name + '.');
}
}
}
// 创建一个 Person 对象
var person1 = new Person('John', 30);
person1.sayHello(); // 输出:Hello, my name is John.
// 创建另一个 Person 对象,并动态添加一个方法
var person2 = new Person('Jane', 25);
person2.sayHelloInJapanese = function() {
console.log('こんにちは、私の名前は' + this.name + 'です。');
}
person2.sayHelloInJapanese(); // 输出:こんにちは、私の名前はJaneです。
```
在上面的例子中,我们先定义了一个 `Person` 构造函数,该函数接受两个参数 `name` 和 `age`,并且将它们赋值给新创建的对象的 `name` 和 `age` 属性。然后,我们使用 `if` 语句检查 `sayHello` 方法是否已经存在于 `Person` 的原型中,如果不存在,就使用动态原型法将该方法添加到原型中。这样,所有从 `Person` 构造函数创建的对象都可以共享 `sayHello` 方法。
接下来,我们创建了两个 `Person` 对象 `person1` 和 `person2`,并分别调用它们的 `sayHello` 方法。然后,我们为 `person2` 对象动态添加了一个新方法 `sayHelloInJapanese`,并且在调用该方法时可以看到其效果。
最后,我们来测试一下这段代码:
```javascript
// 创建一个 Person 对象
var person1 = new Person('John', 30);
person1.sayHello(); // 输出:Hello, my name is John.
// 创建另一个 Person 对象,并动态添加一个方法
var person2 = new Person('Jane', 25);
person2.sayHelloInJapanese = function() {
console.log('こんにちは、私の名前は' + this.name + 'です。');
}
person2.sayHello(); // 输出:Hello, my name is Jane.
person2.sayHelloInJapanese(); // 输出:こんにちは、私の名前はJaneです。
// 创建第三个 Person 对象,并调用已存在的方法
var person3 = new Person('Tom', 35);
person3.sayHello(); // 输出:Hello, my name is Tom.
```
在这个测试中,我们创建了三个不同的 `Person` 对象,分别为 `person1`、`person2`、`person3`。我们可以看到,无论是哪个对象,都可以调用 `sayHello` 方法,而且在 `person2` 对象中,我们还动态添加了一个新方法 `sayHelloInJapanese`,也可以成功地调用。这说明动态原型法创建的对象是非常灵活和可扩展的。
相关推荐
![ppt](https://img-home.csdnimg.cn/images/20210720083527.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)