原型的目的是什么?[重复]

2020/10/12 12:01 · javascript ·  · 0评论

可能重复:
在JavaScript中使用“原型”还是“ this”?

好的,所以我对JS中的OOP有点陌生。

这两个下面的代码片段有什么区别:

function animal(){
    this.name = 'rover';
    this.set_name = function(name){
         this.name = name;
    }
}
function animal(){
    this.name = 'rover';
}
animal.prototype.set_name = function(name){
    this.name = name;
}

他们俩都做同一件事,所以有什么区别呢?

使用原型可以更快地创建对象,因为不必在每次创建新对象时都重新创建该功能。

执行此操作时:

function animal(){
    this.name = 'rover';
    this.set_name = function(name){
         this.name = name;
    }
}

每次创建动物时,都会从头set_name创建函数但是当你这样做

animal.prototype.set_name = function(name){
    this.name = name;
}

不必每次都重新创建该函数;它存在于原型中的一个地方。所以,当你打电话someAnimal.set_name("Ubu");this情况下将被设置为someAnimal和(独一无二的)set_name函数将被调用。


不过,使用第一种语法有一个优点:以这种方式创建的函数将可以访问私有数据:

function animal(){
    var privateData = 'foo'

    this.name = 'rover';
    this.set_name = function(name){
         this.name = name;
         alert(privateData); //will alert 'foo'
    }
}

出于这个原因,Douglas Crockford将这样创建的函数称为“特权”:它们可以访问公共数据和私有数据。

当您通过这些功能创建新对象时,会出现区别

var animal1 = new animal();

第一个函数创建的所有对象将具有nameset_name属性。但是,第二个函数创建的所有对象将共享该set_name属性。

在第一个示例中,每个单独的动物对于set_name函数都有自己的属性,而在第二个示例中,它们通过其原型共享相同的函数。

第一个版本的优点是方法可以访问在构造函数中声明的局部(私有)变量。

第二种方法的优点是它需要较少的内存(因为您只存储一次而不是一百万次),并且在当前的JS引擎中性能更高。

使用第二种方法,您还可以以影响已创建实例的方式将方法修改或添加到类。

本文地址:http://javascript.askforanswer.com/yuanxingdemudeshishenmezhongfu.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!