Корректная опытная цепочка для Функции

Это также сработало, если я переместил все логические условия за пределы конвейера, и переменные стали глобальными на всех этапах

def user_id = currentBuild.rawBuild.getCause(Cause.UserIdCause).getUserId()
def full_name = currentBuild.rawBuild.getCause(Cause.UserIdCause).getUserName()
DevWorkspace_name = "${Developer_workspace}"
if ( DevWorkspace_name ==~ /(?s).*Allura_Main_Infra_PreInt.*/) {
        loadrule = "Infra-uInfra/Infra.loadrule"
        subsystem = "Infra"
        stream_name = "Allura_Main_Infra_PreInt"  
 } 
 pipeline {
  .....
 }
7
задан nicael 11 May 2014 в 18:53
поделиться

4 ответа

Что Вы делаете, здесь действительно не обходит опытную цепочку - этот вопрос мог бы помочь Вам понять то, что на самом деле продолжается. Я не потрудился проверять спецификацию ECMA, но здесь являюсь своим взятием по проблеме:

  • Функция является конструктором функциональных объектов

  • Function.prototype является прототипом, которому наследовались все функциональные объекты - он мог бы содержать свойства как вызов и применяться, которые характерны для всех Функциональных экземпляров; внедрения, которые Вы проверили, были согласованны в этом, это реализовано как сам функциональный объект (как некоторые указали, спецификация ECMA требует этого),

  • Function.prototype.prototype действительно не имеет большого смысла, но поскольку Function.prototype реализован как функциональный объект (который мог возможно использоваться в качестве конструктора), он должен, по крайней мере, существовать; объекты, которые создаются с помощью Function.prototype в качестве конструктора, наследовали бы его свойства - но поскольку не должно быть никакой причины сделать, что-то безумное как это, устанавливая его в NULL, неопределенный или пустой объект разумно

  • Function.prototype.prototype.prototype будет во всей вероятности быть неопределенным: как мы видели прежде, Function.prototype.prototype должен быть чем-то без свойств (пустой, неопределенный или пустой объект) и определенно не функциональный объект; поэтому, его опытное свойство должно быть не определено или могло бы даже бросить ошибку при попытке быть полученным доступ

Надежда это помогает ;)

9
ответ дан 6 December 2019 в 06:38
поделиться

Function.prototype

Из спецификации языка ECMAScript:

15.3.3.1 Function.prototype

Начальное значение Function.prototype является объектом Прототипа функции (разделите 15.3.4).

15.3.4 Свойства объекта прототипа функции

Объектом Прототипа функции является самостоятельно Функциональный объект ([[Класс]], "Функция"), что при вызове принимает любые аргументы и неопределенные возвраты. Значение внутреннего свойства [[Prototype]] объекта Прототипа функции является Объектным объектом прототипа (разделите 15.3.2.1).

Это - функция с “пустым телом”; если это вызывается, это просто возвращается неопределенный. Объект Прототипа функции не имеет valueOf собственного свойства; однако, это наследовало valueOf свойство от Объектного объекта прототипа.

Я получаю этот вывод:

  • Opera: функция () {[собственный код]}
  • Chrome: функционируйте Пустые () {}
  • IE7: прототип функции () {[собственный код]}
  • FF3: функция () {}

Chrome и IE7 назвали их функции, Opera и IE7 говорят Вам, что она не покажет реализацию. Они все договариваются об этом:

nl(typeof Function.prototype); //function

Сравните это с:

nl(typeof Object.prototype); //object
nl(typeof Array.prototype); //object
nl(typeof String.prototype); // object

Function.prototype.prototype

Я становлюсь неопределенным от Opera и IE7, пустого указателя от Chrome и [объектный Объект] от FF3. Кто прав? Начиная с "Объектом Прототипа функции является самостоятельно Функциональный объект", разве это не должна быть циклическая ссылка на себя? Для предотвращения циклической ссылки, они выбрали различные пути. Я не знаю, существует ли стандарт для этого или если это до реализации, но я думаю, что Объект является правильным. Btw, здесь Вы видите различие между внутренним [[прототип]] и общедоступным прототипом в действии, как Вы спрошенный в более раннем вопросе!

Function.prototype.prototype == Object.prototype

Это - ложь, потому что это не тот же объект. Посмотрите выше.

Function.prototype.prototype.prototype

Только FF даст Вам, ответ из-за их реализации Function.prototype.prototype возвращает Объект.

Я соглашаюсь, что Ваш предложенный вывод смотрит больше логики.

Они действительно договариваются об этом:

nl(Object.prototype); // [object Object]
nl(Object.prototype.prototype); // undefined
12
ответ дан 6 December 2019 в 06:38
поделиться

Отвечать на Ваш вопрос непосредственно: Mozilla является правильным. Не только потому, что Brendan Eich работает на Mozilla, но потому что это - единственный правильный способ сделать это. Давайте пробежимся через детали:

  • Каждый конструктор является функцией.
  • Каждая функция имеет prototype свойство, которое будет использоваться для построения объектов.
  • Прототип является объектом (словарь). Отдельные объекты делегируют методы/свойства к своим соответствующим прототипам.
  • В случае функции объект прототипа является особенным — он реализует функционально-специализированные методы и свойства. Тип/класс этого объекта не определяется, и не непосредственно доступный.
  • Этот объект прототипа не может быть Object ни Object.prototype.

Позвольте мне уточнить последний оператор. Если это - ложь, мы можем воссоздать функцию в пользовательском коде как этот:

// we re-creating the function!

// our function constructor
var Fun = function(){ /*...*/ };

// let's chain the prototype
Fun.prototype = new Object();

// do we have a function now? let's fund out
var fun = new Fun();
console.log(fun.length);  // undefined
fun.call(null);           // fail
fun.apply({}, [1, 2, 3]); // fail
// nope

Мы можем наблюдать это new Object() не определяет новые методы, ни свойства и может попытаться использовать Object.prototype непосредственно с тем же результатом.

Сводка: прототип функции не Object ни Object.prototype. Это - некоторый совершенно особый объект. Это - еще одна причина, почему мы не можем воссоздать функцию в пользовательском коде.

Править: поскольку больше деталей о прототипах смотрит на этот ответ.

4
ответ дан 6 December 2019 в 06:38
поделиться

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

Каждый объект в JavaScript имеет объект прототипа, но многие реализации не дают вам прямой доступ к нему или позволит вам установить его после создания объекта. В Firefox вы можете получить доступ к этому объекту через свойство « __ __ .

Ниже у меня есть версия вашего кода с использованием свойства « __ __ . Раздел на функциональной цепочке прототипов соответствует тому, что вы думали, что это должно быть.

function nl(z) { document.write(z + "<br>"); }

x = {};

nl(x["__proto__"]);
nl(x["__proto__"] === Object.prototype);

nl("");

nl(nl.prototype.constructor);
nl(nl["__proto__"].constructor);
nl(nl["__proto__"] === nl.prototype);

nl("");

nl(nl["__proto__"]);
nl(nl["__proto__"] === Function.prototype);
nl(nl["__proto__"]["__proto__"] === Object.prototype);
nl(nl["__proto__"]["__proto__"]["__proto__"]);

nl("");

nl(Function["__proto__"]);
nl(Function["__proto__"]["__proto__"]);
nl(Function["__proto__"]["__proto__"] === Object.prototype);
nl(Function["__proto__"]["__proto__"]["__proto__"]);

Выход в Firefox:

[object Object]
true

function nl(z) { document.write(z + "
"); }
function Function() { [native code] }
false

function () { }
true
true
null

function () { }
[object Object]
true
null
2
ответ дан 6 December 2019 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: