动态原型

动态原型模式将所有信息封装在了构造函数中,而通过构造函数中初始化原型(仅第一个对象实例化时初始化原型),这个可以通过判断该方法是否有效而选择是否需要初始化原型。

function Blog(name, url) {
   this .name = name;
   this .url = url;
 
   if ( typeof this .alertInfo != 'function' ) {
     // 这段代码只执行了一次
     alert( 'exe time' );
     Blog.prototype.alertInfo = function () {
       alert(thia.name + this .url);
     }
   }
}
 
var blog = new Blog( 'wuyuchang' , 'http://tools.***.net' ),
   blog2 = new Blog( 'wyc' , 'http:***.com' );

}

posted on 2017-07-06 14:35  麦田里的包米 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/guanguan-/p/7126226.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
动态原型法是一种创建对象的方式,它允许我们在运行时动态地添加属性和方法,从而创建一个完整的对象。下面是一个利用动态原型法创建对象的例子: ```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`,也可以成功地调用。这说明动态原型法创建的对象是非常灵活和可扩展的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值