gpt4 book ai didi

javascript - 原型(prototype)的目的是什么?

转载 作者:行者123 更新时间:2023-11-28 08:01:55 25 4
gpt4 key购买 nike

Possible Duplicate:
Use of 'prototype' vs. 'this' in JavaScript?

好的,我对 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;
}

它们都做同样的事情,那么有什么区别呢?

最佳答案

使用原型(prototype)可以更快地创建对象,因为每次创建新对象时不必重新创建原型(prototype)上的属性/方法。

当你这样做时:

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

每次创建动物时都会创建 set_name 方法。但是当你这样做时

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

该方法不必每次都重新创建;它存在于原型(prototype)中的一个位置。因此,当您调用 someAnimal.set_name("Ubu"); 时,this 上下文将被设置为 someAnimal 并且(唯一的)set_name 方法将被调用。

<小时/>

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

function animal() {
var privateData = 'foo'

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

Douglas Crockford 称这样创建的方法为“特权”,因为它们可以访问公共(public)和私有(private)数据。

关于javascript - 原型(prototype)的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25278513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com