Каково различие между свойством и методом в Javascript?

Мое сомнение появляется после того, как видит в ссылках Javascript, которые length оно считается свойством. Что делает length для того, чтобы он считался свойством и не методом? Спасибо.

1
задан 18.07.2016, 17:10
4 ответа

Если мы основываемся на концепциях POO (ProgramaciГіn Orientada в Объекты) свойство - одно caracterГ-stica объекта в то время как один mГ©todo - один acciГіn.

tГ-Пик пример serГ - в класс собака, где цвет волос - свойство в то время как бежать serГ - в один mГ©todo.

Если мы основываемся в этой definiciГіn эта ясно, что length serГ - в длину или же это величина, которая описывает инстанцию, поэтому это свойство.

AquГ -

IntroducciГіn в язык сценариев JavaScript, ориентируемый на объекты

описывает само, которое прокомментировало

5
ответ дан 24.11.2019, 13:49
  • 1
    Спасибо Леандро, уже выйди и # 237; сомнения. – agujex 18.07.2016, 17:35
  • 2
    Это не является верным. В javascript, в классе собака, прокручивать изображение в окне - так свойство как один м и # 233; все. У Javascript нет классов (он это включает в ES6, так как они просто sintactic sugar на функциях), а следовательно традиционная логика POO не применяется aqu и # 237;. Если прокручивать изображение в окне не было свойство класса собака стоимость this, когда ты выполняешь perro.correr() снаружи глобальный объект, и в этом случае - та же инстанция класса. cc://@agujex – devconcept 18.07.2016, 17:54
  • 3
    @devconcept ok, но ты не llendo в очень тонкую и особенную точку в особенном осуществлении javascript, я понял, что искались фундаментальные концепции POO, где он позволяет себе разбираться в ясной и конкретной форме, я говорю, что ты преуспеваешь несмотря на то, что осложняешь понимание основных концепций? Относительно метода прокручивать изображение в окне () в realida зависит, как ты это определил, если я заявляю function о том, что прокручиваю изображение в окне () {...} это метод / функция. Также я не думаю, что это была идея, проникать с prototype или IIFE ( benalman.com/news/2010/11/… ), и т.д. – Leandro Tuttini 18.07.2016, 18:32
  • 4
    Вопрос est и # 225; приклеенная этикетку как javascript, у него есть javascript в t и # 237; tulo и форма, в которой объекты функционируют в javascript, не та же самая, что в dem и # 225; s языки. Вместо того, чтобы запутывать я ищу осветлять ошибку концепции, которая очень com и # 250; n в тех, которые ищут изучать язык. Я думаю, что это лучше, что заканчивать тем, что замечать ошибку despu и # 233; s некоторых в и # 241; вы использования. – devconcept 18.07.2016, 18:41
  • 5
    Ответ Леандро est и # 225; хорошая, потому что он заставляет тебя понимать r и # 225; pidamente, потому что length - свойство, но я думаю, что важно оставлять в просвете, что один м и # 233; все может быть свойством и свойством один м и # 233; все как он говорит @devconcept. Спасибо. – agujex 18.07.2016, 18:56

Методы в любом языке - рутина кода invocables. Это значит, что, когда они снабжены ссылками символом, определенным языком, работает вышеупомянутый код. В javascript этот символ - скобки () и методы создаются используя функции.

Пример

var fnA = function() {
  return 'resultado fnA'
}

// Imprime el contenido de la funcion (equivalente a fnA.toString())
console.log(fnA);
// Ejecuta el bloque de código de la función e imprime su retorno
console.log(fnA())

Свойства в javascript характерные для всех объектов, кроме null и undefined против что являются примитивной стоимостью, которая испытывает недостаток в Вашем эквиваленте, я возражаю wrapper.

'test' -> primitivo
new String() -> wrapper

123   -> primitivo
new Number() -> wrapper

Ты можешь думать о них как вид склада ключ - стоимость. Вышеупомянутая стоимость в свою очередь может быть другим объектом или функцией, так как функции в javascript также - объекты. Это главным образом адреса памяти, ассоциируемые с объектом.

Objeto javascript

var fnA = function() {
  console.log('resultado fnA');
}

var obj2 = {
  prop1: fnA,
  prop2: 'valor2',
  prop3: 'valor3'
};

var obj = {
  prop1: 'valor1',
  prop2: obj2,
  prop3: fnA
}

for (var prop in obj) {
  console.log(prop + ':', obj[prop]);
}

for (var prop in obj2) {
  console.log(prop + ':', obj2[prop]);
}

console.log('obj.prop3 es el mismo objeto que obj2.prop1');

console.log(obj.prop3 === obj2.prop1);

В твоем случае length это свойство, потому что она присоединена с определенным объектом и не метод, потому что он не invocable. Это - то, что делает различие между одним и другим типом. Продолжая логику предыдущего у тебя может быть следующее:

// No es ni un método ni una propiedad
var obj = {};

// Es un método pero no es una propiedad 
var fn = function() {};

var obj = {}
// Es una propiedad pero no es un método
obj.prop = 10;

var obj = {};
// Es tanto una propiedad como un método
obj.prop = function() {};

Имей в виду, что методы или функции меняют стоимость this если они призваны как свойства объекта или как регулярные функции.

'use strict';

var fn = function() {
  return this;
}

var obj = {
  prop1: 'valor',
  prop2: fn
}

// undefined en modo estricto
// el valor de window sin modo estricto
console.log(fn());
// el valor del "objeto inmediato" al que hace referencia la propiedad, en este caso obj
console.log(obj.prop2());
// si fuera a.b.c.d() sería el objeto almacenado en c

Как добавочное замечание также элементы договоренности - свойства этого, на том же равном уровне, который length, toString(), filter(), map(), и т.д. С точки зрения языка все свойства так же.

var arr = [1, 2, 3, 4];
// se puede acceder a una propiedad usando objeto.propiedad u objeto['propiedad']
console.log('length');
console.log(arr['length']);
console.log(arr.length);
console.log('accediendo por índice');
console.log(arr['1']);
// arr.1 sería un error de sintáxis por eso no es posible
console.log(arr[1]);
console.log('comparando')
console.log(arr[1] === arr['1']);
//es transformado en arr[1] !== arr['01']
console.log(arr[01] !== arr['01']);
console.log('invocando');
// equivalente a arr.toString()
console.log(arr['toString']())
6
ответ дан 24.11.2019, 13:49
  • 1
    Спасибо! или же., если у меня есть sig, я возражаю против var persona = { nombre : "juan", apellido : "perez", nombreCompleto: function() {return this.nombre + " " + this.apellido;} } " nombreCompleto" быть и # 237; в так свойство как один м и # 233; все? – agujex 18.07.2016, 18:20
  • 2
    @agujex Точный!!! и в твоем примере ты используешь функцию an и # 243; nima распределенная свойству nombreCompleto из объекта явись лично а следовательно, чтобы призывать ее, ты это нуждаешься в том, чтобы делать всегда как свойство этот. Прочитай edici и # 243; n моего ответа для того, чтобы ты увидел, как выносят this в зависимости от, как призывается м и # 233; все. Помни, что в javascript он v и # 225; lido делать var persona = {..., nombreCompleto: function otroNombreCualquiera() { return ....; }} и функционирует пойдите и # 233; ntico. Чтобы обобщать nombreCompleto принадлежи объекту, не м и # 233; совсем как таковой. – devconcept 18.07.2016, 18:30

Программирование, ориентируемое на объекты

В области программирования, ориентируемого на объекты говорят о свойствах и методах между другими вещами. Когда мы имеем в виду свойства, значь, что у объекта могут быть характеристики, для твоего случая объект String, у него есть функция, которая состоит в том, чтобы показывать длину цепи звоня в свойство length. В то время как методы предоставляют действия, которые объект может реализовывать, для объекта String, действие состояло бы в том, чтобы создавать формат цепи в только мелких, что может делаться звоня в метод toLowerCase(). Это главным образом короткое описание propiedades и métodos. Пример был бы.

str_object = new String("FOO") // crea un obejto tipo string
str_object.length     // devuelve la longitud de la cadena
str_object.toLowerCase()  // convierte a minúsculas la cadena

главным образом это было бы примером использования propiedades и métodos, помни, что, если ты создаешь твоих собственных objetos ты можешь создавать также твоих собственных propiedades и métodos, чтобы называть их, после создавая objeto, ты используешь нотацию . как в примере string.

1
ответ дан 24.11.2019, 13:49

Ответ отрезает в твой вопрос: Свойства только хранят данные, взамен методы реализуют действия и изменяют свойства.

Это образно:

introducir la descripción de la imagen aquí

Где объекты у человека могут быть N свойства и M методы. Привет.

1
ответ дан 24.11.2019, 13:49