Jump to content
  • 0

Метод call и this


DivMan
 Share

Question

Почему через точку не работает?

 

var user = {
firstName: "Василий",
surname: "Петров",
patronym: "Иванович"
};

function showFullName(firstPart, lastPart) {
alert( this.firstPart + " " + this.lastPart );
}


showFullName.call(user, 'firstName', 'surname') // "Василий Петров"
showFullName.call(user, 'firstName', 'patronym') // "Василий Иванович"

А вот так работает

function showFullName(firstPart, lastPart) {
alert( this[firstPart] + " " + this[lastPart] );
}

Edited by DivMan
Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

здесь же работает

 

function showFullName() {
  alert( this.firstName + " " + this.lastName );
}

var user = {
  firstName: "Василий",
  lastName: "Петров"
};

// функция вызовется с this=user
showFullName.call(user) // "Василий Петров"

 

Edited by DivMan
Link to comment
Share on other sites

  • 0

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

то есть фактически получается так:

 1)  firstPart  =  user.firstName

2)  this.firstPart

2 - неправильно т.к. доступ к значению св-ва заданного через переменную осуществляется ТОЛЬКО через [ ];

16 час назад, DivMan сказал:

здесь же работает

 


function showFullName() {
  alert( this.firstName + " " + this.lastName );
}

var user = {
  firstName: "Василий",
  lastName: "Петров"
};

// функция вызовется с this=user
showFullName.call(user) // "Василий Петров"

 

здесь доступ к значению свойства осуществляется напрямую. Функция showFullName() выполняется в контексте объекта user.

замените this на user и получите прямой доступ к значению свойства.

Edited by svarog96
Link to comment
Share on other sites

  • 0

Почему не складываются аргументы?

let o = {
    origin: 100
}
 
function sum(){
    let megaFunc = function(){
        let origin = this.origin;
     
        for(var i =0; i < arguments.length; i++){
            origin += arguments[i]
}
        return origin
    }
     
    return megaFunc.call(o)
}
 
console.log(sum.call(o, 2,3))

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By Antoshka007
      Всем привет!
       
      Чем отличаются две следующие строки?
      obj.toString();Object.prototype.toString.call(obj);В первом случае контекст - это obj, во втором тоже. Или я что-то неправильно понимаю?
      Спасибо!
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy